废话在先:个人认为,对于有一定编程基础或有一定编程经验的开发者来说,学习新的技术并不喜欢看一些基础的介绍,也不需要花上多少时间,只需要看上几个简单明了的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跨平台服务相关推荐

  1. 使用 Amazon Amplify快速创建简单的 Android 应用程序

    背景: 亚马逊云科技提供了100余种产品免费套餐.其中,计算资源Amazon EC2首年12个月免费,750小时/月:存储资源 Amazon S3 首年12个月免费,5GB标准存储容量. 大家好,我是 ...

  2. java使用mq教程,Java语言快速实现简单MQ消息队列服务

    使用 JAVA 语言自己动手来写一个MQ (类似ActiveMQ,RabbitMQ) 主要角色 首先我们必须需要搞明白 MQ (消息队列) 中的三个基本角色 Producer Broker Consu ...

  3. 我的WCF之旅(1):创建一个简单的WCF程序

    http://www.cnblogs.com/artech/archive/2007/02/26/656901.html 为了使读者对基于WCF的编程模型有一个直观的映像,我将带领读者一步一步地创建一 ...

  4. 创建一个简单的WCF程序

    为了使读者对基于WCF的编程模型有一个直观的映像,我将带领读者一步一步地创建一个完整的WCF应用.本应用功能虽然简单,但它涵盖了一个完整WCF应用的基本结构.对那些对WCF不是很了解的读者来说,这个例 ...

  5. sql创建表主键gui_在SQL Server中使用主数据服务快速创建最终用户可以维护的GUI

    sql创建表主键gui 介绍 ( Introduction ) Oft times we are forced into situations where we clearly need to thi ...

  6. WCF 创建简单的CF程序VS2008

    为了使读者对基于WCF的编程模型有一个直观的映像,我将带领读者一步一步地创建一个完整的WCF应用.本应用功能虽然简单,但它涵盖了一个完整WCF应用的基本结构.对那些对WCF不是很了解的读者来说,这个例 ...

  7. 消息(6)——WCF,构建简单的WCF服务,MTOM编码

    构建一个简单的WCF服务. 以Web服务类似的步骤由IIS进行宿主服务.建立的步骤: 1 新建3.5网站 2 添加WCF服务,自动生成契约接口与实现,这里改动一下,添加个字串参数: [ServiceC ...

  8. 流媒体视频服务:快速搭建一个简单的流媒体视频服务(一)

    快速搭建一个简单的流媒体视频服务 前言 系统组成 RTMP协议简介 Red5 概述 Red5 服务器搭建 前言 最近自己在研究有关于流媒体播放的技术,网上资料甚少.出于开源精神以及在查阅资料得到各位大 ...

  9. WebRTC源码研究(7)创建简单的HTTPS服务

    文章目录 WebRTC源码研究(7)创建简单的HTTPS服务 1. HTTPS简介 2. HTTPS 协议 3. HTTPS 证书 4. 创建简单的HTTPS服务 4.1 生成HTTPS证书 4.2 ...

  10. UWA Pipeline 功能详解|如何快速创建UWA服务

    今天为大家详细介绍的是如何在一条UWA Pipeline内快速创建UWA服务,包括自动化测试.GOT Online测试.真人真机测试.本地资源检测服务,让UWA性能保障体系无缝融入到项目工业化之中,进 ...

最新文章

  1. 【青少年编程(第29周)】8月份的青少年编程组队学习结营了!
  2. Android AM命令行启动程序的方法
  3. 1.3 字符编码介绍
  4. 华为在哪发布的鸿蒙,华为鸿蒙2.0可以替代安卓吗,华为鸿蒙2.0优势在哪
  5. Android自动化之旅—生成渠道包
  6. CM: How to get the complete url of a product attachment
  7. MFC图像增强之图像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt锐化
  8. 【网站】 简单通用微信QQ跳转浏览器打开代码
  9. 打开旧Flutter项目说:Your Flutter application is created using an older version of the Android embedding
  10. Ceilometer的知识总结
  11. 【旅行商问题】基于matlab免疫算法求解旅行商问题【含Matlab源码 195期】
  12. JS 通过选择百度地图地址获取经纬度自动填充到文本框中的方法
  13. 【正点原子MP157连载】第十四章 串口通信实验-摘自【正点原子】STM32MP1 M4裸机CubeIDE开发指南
  14. Google Hacking 搜索引擎攻击与防范
  15. 怎么利用粉丝圈这个微信社区工具做好社群营销?我们是做教育行业
  16. 第十届ACM山东省赛总结
  17. 如何找到时序列中的缺失月(missing month)/天(missing day)并补全?尤其针对多个客户或产品的月/天销量 -- 史上最简单方法,只要2行python代码
  18. decode函数的用法(decode函数的用法python二进制)
  19. 阿里云(三) Ubuntu系统下mysql卸载
  20. d58站群inc.php,站群 - 蜘蛛侠站群_站群程序_D58.NET站群系统

热门文章

  1. plantUML 学习
  2. 这封“领导痛批95后下属”的邮件,句句扎心!
  3. 稳的一比,鸿蒙系统霸榜Github!
  4. RabbitMQ 线上事故!慌的一批,脑袋一片空白……
  5. 阿里巴巴的26款超神Java开源项目!建议收藏~
  6. 《区块链》都火了两年多了,你还不知道它是什么?
  7. openwrt源码分析_编译个性化的OPENWRT固件(openWRT源码修改)
  8. mysql基础之mariadb集群主从架构半同步复制
  9. VSNETcodePrint 2005 SQL ServerPrint 2005
  10. 一本通1619【例 1】Prime Distance