快速创建简单的WCF跨平台服务
废话在先:个人认为,对于有一定编程基础或有一定编程经验的开发者来说,学习新的技术并不喜欢看一些基础的介绍,也不需要花上多少时间,只需要看上几个简单明了的Demo,基本上就能明白其中的大概。最近在学习WCF编程,由于习惯于 http://DomainName/Service/Method?value=XXX 这种方式在客户端发送请求,于是想使用WCF实现这种请求服务,于是在网上寻找实现方式,然而找出的文章却尽是些介绍WCF原理废话(个人认为),却没有一个完整的Demo,于是就自己一番折腾~~
本文针对于有一定asp.net或C/S开发基础的开发者,就不废话了,讲一下如何实现吧:
一、创建WCF服务应用程序:
啥?否知道这个界面在哪?呃~~还是先学一下asp.net基础吧~~
创建后的项目结构如下:
首先修改一下IService1.cs,需要被远程请求的方法都需要加上[OperationContract]特性,为了使用该方法能像网址一样的试调用,还需要添加如下特性:
1 [WebInvoke( 2 BodyStyle = WebMessageBodyStyle.WrappedRequest, 3 RequestFormat = WebMessageFormat.Xml, 4 ResponseFormat = WebMessageFormat.Json, 5 Method = "GET", 6 UriTemplate = "/GetData/{value}")]
还是解释一下吧:
RequestFormat: 这个是用于设置请求的数据用何种数据格式发送到服务器,可以是 WebMessageFormat.Xml 或 WebMessageFormat.Json;
ResponseFormat: 这个是用于设置于响应的数据用何种数据格式返回给客户端:可以是 WebMessageFormat.Xml 或 WebMessageFormat.Json;
Method:请求方式,可以是GET 或 POST;
UriTemplate:这个是重点,就是请求地址的格式模板。
先看一下IService1完整代码:
[ServiceContract]public interface IService1{[OperationContract][WebInvoke(BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Json, Method = "GET", UriTemplate = "/GetData/{value}")]string GetData(string value);[OperationContract][WebInvoke(BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, Method = "GET", UriTemplate = "/GetAge?age={age}")]string GetAge(string age);[OperationContract]CompositeType GetDataUsingDataContract(CompositeType composite);// TODO: 在此添加您的服务操作}
还是再简单讲一UriTemplate,如果你的请求地址模板是UriTemplate = "/GetData/{value}" 是酱紫滴~~那么请求的地址就是:
http://DomainName/Service1.svc/Service1.svc/GetData/123
如果请求地址模板是UriTemplate = "/GetAge?age={age}" 是酱紫滴~~那么请求的地址就是:
http://localhost:27449/Service1.svc/GetAge?age=123
特别注意的是,地址地板里的{} 的内容必需要跟方法的参数名一样。
以上都是只有一个参数的,如果有多个参数,咋办呢?比如这样的方法:
string Login(string userName,string pwd);
猜到了吧,请求地址模板是酱紫:UriTemplate = "/Login?userName={userName}&password={pwd}",完整请求地址:
http://localhost:27449/Service1.svc/Login?userName={Dincat}&password={123456}
接下来看一下实现IService接口的类是咱样滴:
1 [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 2 public class Service1 : IService1 3 { 4 public string GetData(string value) 5 { 6 //WebOperationContext.Current.IncomingRequest.he 7 return string.Format("You entered: {0}", value); 8 } 9 10 public string GetAge(string age) 11 { 12 return string.Format("Your Age: {0}", age); 13 } 14 15 public CompositeType GetDataUsingDataContract(CompositeType composite) 16 { 17 if (composite == null) 18 { 19 throw new ArgumentNullException("composite"); 20 } 21 if (composite.BoolValue) 22 { 23 composite.StringValue += "Suffix"; 24 } 25 return composite; 26 } 27 }
这里不多讲,在类名上记得加上
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
就O了。
最后,把Web.config里的<system.serviceModel></system.serviceModel>节点修改一下,整个Web.config如下:
1 <?xml version="1.0" encoding="utf-8"?> 2 <configuration> 3 4 <system.web> 5 <compilation debug="true" targetFramework="4.0" /> 6 </system.web> 7 8 9 <system.serviceModel> 10 <services> 11 <service name="WcfService4.Service1" behaviorConfiguration="WcfService4.Service1Behavior"> 12 <!-- Service Endpoints --> 13 <endpoint address="" binding="webHttpBinding" contract="WcfService4.IService1" behaviorConfiguration="httpBehavior"> 14 <identity> 15 <dns value="localhost"/> 16 </identity> 17 </endpoint> 18 <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 19 </service> 20 </services> 21 <behaviors> 22 <serviceBehaviors> 23 <behavior name="WcfService4.Service1Behavior"> 24 <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false --> 25 <serviceMetadata httpGetEnabled="true" /> 26 <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 --> 27 <serviceDebug includeExceptionDetailInFaults="true"/> 28 29 </behavior> 30 </serviceBehaviors> 31 32 <endpointBehaviors> 33 <behavior name="httpBehavior"> 34 <webHttp/> 35 </behavior> 36 </endpointBehaviors> 37 38 </behaviors> 39 </system.serviceModel> 40 41 42 <system.webServer> 43 <modules runAllManagedModulesForAllRequests="true"/> 44 <!-- 45 若要在调试过程中浏览 Web 应用程序根目录,请将下面的值设置为 True。 46 在部署之前将该值设置为 False 可避免泄露 Web 应用程序文件夹信息。 47 --> 48 <directoryBrowse enabled="true"/> 49 </system.webServer> 50 51 </configuration>
好吧~~看不懂是吧?这里俺承认还是要看一下相关的基础,了解一下啥是Address(地址)、Binding(绑定)、Contract(契定)。
个人觉得这里比较关键的是 binding="webHttpBinding" ,这个设置用于设定你的服务用何种方式(命名管道、TCP、UDP、HTTP等等)来承载。
另外一个关键点就是终点行为节点,看图:
如果没有上图的结点行为配置,看一下效果是咋滴:
俺就是被这问题折腾了很久……
好了,最后看一下运行效果吧:
源码地址:http://download.csdn.net/detail/dincat/9150205
转载于:https://www.cnblogs.com/Dincat/p/Dincat.html
快速创建简单的WCF跨平台服务相关推荐
- 使用 Amazon Amplify快速创建简单的 Android 应用程序
背景: 亚马逊云科技提供了100余种产品免费套餐.其中,计算资源Amazon EC2首年12个月免费,750小时/月:存储资源 Amazon S3 首年12个月免费,5GB标准存储容量. 大家好,我是 ...
- java使用mq教程,Java语言快速实现简单MQ消息队列服务
使用 JAVA 语言自己动手来写一个MQ (类似ActiveMQ,RabbitMQ) 主要角色 首先我们必须需要搞明白 MQ (消息队列) 中的三个基本角色 Producer Broker Consu ...
- 我的WCF之旅(1):创建一个简单的WCF程序
http://www.cnblogs.com/artech/archive/2007/02/26/656901.html 为了使读者对基于WCF的编程模型有一个直观的映像,我将带领读者一步一步地创建一 ...
- 创建一个简单的WCF程序
为了使读者对基于WCF的编程模型有一个直观的映像,我将带领读者一步一步地创建一个完整的WCF应用.本应用功能虽然简单,但它涵盖了一个完整WCF应用的基本结构.对那些对WCF不是很了解的读者来说,这个例 ...
- sql创建表主键gui_在SQL Server中使用主数据服务快速创建最终用户可以维护的GUI
sql创建表主键gui 介绍 ( Introduction ) Oft times we are forced into situations where we clearly need to thi ...
- WCF 创建简单的CF程序VS2008
为了使读者对基于WCF的编程模型有一个直观的映像,我将带领读者一步一步地创建一个完整的WCF应用.本应用功能虽然简单,但它涵盖了一个完整WCF应用的基本结构.对那些对WCF不是很了解的读者来说,这个例 ...
- 消息(6)——WCF,构建简单的WCF服务,MTOM编码
构建一个简单的WCF服务. 以Web服务类似的步骤由IIS进行宿主服务.建立的步骤: 1 新建3.5网站 2 添加WCF服务,自动生成契约接口与实现,这里改动一下,添加个字串参数: [ServiceC ...
- 流媒体视频服务:快速搭建一个简单的流媒体视频服务(一)
快速搭建一个简单的流媒体视频服务 前言 系统组成 RTMP协议简介 Red5 概述 Red5 服务器搭建 前言 最近自己在研究有关于流媒体播放的技术,网上资料甚少.出于开源精神以及在查阅资料得到各位大 ...
- WebRTC源码研究(7)创建简单的HTTPS服务
文章目录 WebRTC源码研究(7)创建简单的HTTPS服务 1. HTTPS简介 2. HTTPS 协议 3. HTTPS 证书 4. 创建简单的HTTPS服务 4.1 生成HTTPS证书 4.2 ...
- UWA Pipeline 功能详解|如何快速创建UWA服务
今天为大家详细介绍的是如何在一条UWA Pipeline内快速创建UWA服务,包括自动化测试.GOT Online测试.真人真机测试.本地资源检测服务,让UWA性能保障体系无缝融入到项目工业化之中,进 ...
最新文章
- 【青少年编程(第29周)】8月份的青少年编程组队学习结营了!
- Android AM命令行启动程序的方法
- 1.3 字符编码介绍
- 华为在哪发布的鸿蒙,华为鸿蒙2.0可以替代安卓吗,华为鸿蒙2.0优势在哪
- Android自动化之旅—生成渠道包
- CM: How to get the complete url of a product attachment
- MFC图像增强之图像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt锐化
- 【网站】 简单通用微信QQ跳转浏览器打开代码
- 打开旧Flutter项目说:Your Flutter application is created using an older version of the Android embedding
- Ceilometer的知识总结
- 【旅行商问题】基于matlab免疫算法求解旅行商问题【含Matlab源码 195期】
- JS 通过选择百度地图地址获取经纬度自动填充到文本框中的方法
- 【正点原子MP157连载】第十四章 串口通信实验-摘自【正点原子】STM32MP1 M4裸机CubeIDE开发指南
- Google Hacking 搜索引擎攻击与防范
- 怎么利用粉丝圈这个微信社区工具做好社群营销?我们是做教育行业
- 第十届ACM山东省赛总结
- 如何找到时序列中的缺失月(missing month)/天(missing day)并补全?尤其针对多个客户或产品的月/天销量 -- 史上最简单方法,只要2行python代码
- decode函数的用法(decode函数的用法python二进制)
- 阿里云(三) Ubuntu系统下mysql卸载
- d58站群inc.php,站群 - 蜘蛛侠站群_站群程序_D58.NET站群系统
热门文章
- plantUML 学习
- 这封“领导痛批95后下属”的邮件,句句扎心!
- 稳的一比,鸿蒙系统霸榜Github!
- RabbitMQ 线上事故!慌的一批,脑袋一片空白……
- 阿里巴巴的26款超神Java开源项目!建议收藏~
- 《区块链》都火了两年多了,你还不知道它是什么?
- openwrt源码分析_编译个性化的OPENWRT固件(openWRT源码修改)
- mysql基础之mariadb集群主从架构半同步复制
- VSNETcodePrint 2005 SQL ServerPrint 2005
- 一本通1619【例 1】Prime Distance