今天来看看WCF的配置方法。

上图整理了服务配置过程中所用到的基本的元素,大致的步骤主要是首先要在调用服务的程序集中添加服务的一个引用,然后添加一个service并指定服务的名称、终结点,如果添加了behavior(行为)的配置,那么也需要添加一个behaviorConfiguration的配置信息。在添加一个service时会在其中指定终结点的信息,终结点说的就是服务的具体信息访问方式,在终结点中添加服务address及binding信息和contract(服务契约)信息等。在endpoint中添加的binding只是指定了服务绑定的访问方式,例如:basicHttpBinding等,真正的binding配置是需要在另外的binding中添加的,添加好后需要配置在endpoint的bindingConfiguration。下面看一个服务在客户端部署配置的示例。

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <configuration>
  3. <startup>
  4. <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  5. </startup>
  6. <system.serviceModel>
  7. <!--The bindings configuration
  8. We deployed the basichttpbinding.
  9. I added a binding that name is binding1.
  10. The binding1 used the security.
  11. -->
  12. <bindings>
  13. <basicHttpBinding>
  14. <binding name="binding1">
  15. <security mode="Message">
  16. <message clientCredentialType="Certificate"/>
  17. </security>
  18. </binding>
  19. </basicHttpBinding>
  20. </bindings>
  21. <!--The behaviors configuration
  22. I added a serviceBehavior that has nothing configuration in.
  23. -->
  24. <behaviors>
  25. <serviceBehaviors>
  26. <behavior name="service1_behavior">
  27. </behavior>
  28. </serviceBehaviors>
  29. </behaviors>
  30. <!--The services configuration
  31. I added a service that behaviorConfiguration is service1_behavior.
  32. This service has an endpoint that added the property and the binding.
  33. -->
  34. <services>
  35. <service name="Wcfservice.Service1" behaviorConfiguration="service1_behavior">
  36. <endpoint address="http://localhost:64921/Service1.svc" name="ServiceReference1_IService1"
  37. binding="basicHttpBinding" bindingConfiguration="binding1" contract="ServiceReference1.IService1"></endpoint>
  38. </service>
  39. </services>
  40. </system.serviceModel>
  41. </configuration>

上例将配置信息写入到了xml中,分别添加了一个服务的binding、service和behavior,在添加时往往是自下向上添加,首先添加一个binding配置信息,然后添加相应的behavior行为,最后添加一个service并把绑定信息添加到其中。

service

service主要是用来配置endpoint和host的,它实际上代表了为程序集添加了一个服务的引用,其中的endpoint指定了服务的地址、绑定和协议,host则提供了服务寄宿的方式。
如下配置:

  1. <services>
  2. <service name="Wcfservice.Service1">
  3. <host>
  4. <baseAddresses>
  5. <add baseAddress="http://localhost:64921/ConsoleApplication1"/>
  6. </baseAddresses>
  7. </host>
  8. <endpoint address="http://localhost:64921/WcfService1.IService1" binding="basicHttpBinding"
  9. bindingConfiguration="binding1" contract="ServiceReference1.IService1"></endpoint>
  10. </service>
  11. </services>

在上面的代码中添加了一个service,并为service配置了一个host该host的应用程序即为当前引用服务的程序集。最后添加了一个endpoint,终结点中绑定了URI,URI的地址就是WCF的定义地址,其中的binding是指定了基本的绑定类型,另外还使用contract指定了服务契约的接口。

binding

service是对服务进行的配置,指定了服务的一些配置信息,另外很重要的和service同级还有binding,它是对消息访问方式做的一些配置。
1、绑定方式
分为系统自带的绑定和用户自定义绑定两种,系统自带的绑定包括basicHttpBinding、WcHttpBinding等。
如果系统提供的绑定功能不完全,那么也可以使用用户自定义的绑定功能,可以使用customBinding对象从预先存在的绑定元素中创建新的绑定,也可以通过从Binding派生类来创建完全由用户自定义的绑定。
2、基本功能
绑定除了定义绑定的方式外,还可以指定传输协议的类型、安全性、编码方式和事务等,通过绑定来配置WCF的基本操作类型,这样能够对服务做详细的一些配置,使服务的功能更加健全。

  1. <?xml version=”1.0 encoding=”utf-8 ?>
  2. <configuration>
  3. <system.serviceModel>
  4. <services>
  5. <service name =”WCFService.ServiceClass” behaviorConfiguration=”metadataSupport”>
  6. <host>
  7. <baseAddresses>
  8. <add baseAddress=”net.pipe://localhost/WCFService”/>
  9. <add baseAddress=”net.tcp://localhost:8000/WCFService”/>
  10. <add baseAddress=”http://localhost:8080/WCFService”/>
  11. </baseAddresses>
  12. </host>
  13. <endpoint address=”tcpmex” binding=”mexTcpBinding”
  14. contract=”IMetadataExchange”/>
  15. <endpoint address=”namedpipemex” binding=
  16. mexNamedPipeBindingcontract=”IMetadataExchange”/>
  17. <endpoint address=”” binding=”wsHttpBinding”
  18. contract=”WCFService.IServiceClass”/>
  19. </service>
  20. </services>
  21. <behaviors>
  22. <serviceBehaviors>
  23. <behavior name=”metadataSupport”>
  24. <serviceMetadata httpGetEnabled=”false” httpGetUrl=””/>
  25. </behavior>
  26. </serviceBehaviors>
  27. </behaviors>
  28. </system.serviceModel>
  29. </configuration>

Behavior

行为属性,行为属性可以控制服务的运行时特性,主要分为服务行为和操作行为,这些行为或特性,可以通过配置runtime属性配置文件,或自定义行为来实现。

  1. <?xml version=”1.0 encoding=”utf-8 ?>
  2. <configuration>
  3. <system.serviceModel>
  4. <services>
  5. <service name =”WCFService.ServiceClass” behaviorConfiguration=”metadataSupport”>
  6. <host>
  7. <baseAddresses>
  8. <add baseAddress=”net.pipe://localhost/WCFService”/>
  9. <add baseAddress=”net.tcp://localhost:8000/WCFService”/>
  10. <add baseAddress=”http://localhost:8080/WCFService”/>
  11. </baseAddresses>
  12. </host>
  13. <endpoint address=”tcpmex” binding=”mexTcpBinding” contract=”IMetadataExchange”/>
  14. <endpoint address=”namedpipemex” binding=”mexNamedPipeBinding” contract=”IMetadataExchange”/>
  15. <endpoint address=”” binding=”wsDualHttpBinding” contract=”WCFService.IServiceClass”/>
  16. <!--<endpoint address=”mex” binding=”mexHttpBinding” contract=”IMetadataExchange”/>-->
  17. </service>
  18. </services>
  19. <behaviors>
  20. <serviceBehaviors>
  21. <behavior name=”metadataSupport”>
  22. <!--允许客户端侦听服务器日志,在正式运行前最好关闭-->
  23. <serviceDebug includeExceptionDetailInFaults=”true”/>
  24. <serviceMetadata httpGetEnabled=”false” httpGetUrl=””/>
  25. <serviceThrottling maxConcurrentCalls=”10” maxConcurrentInstances=”5” maxConcurrentSessions=”5”/>
  26. <serviceSecurityAudit auditLogLocation=”Application” suppressAuditFailure=”false”/>
  27. </behavior>
  28. </serviceBehaviors>
  29. </behaviors>
  30. </system.serviceModel>
  31. </configuration>

Note:serviceMetadata 是一种元数据启用功能,它是配置元数据终结点,默认情况下是不公开元数据的,但是可以通过启用配置来公开元数据的终结点。
上面的代码都是使用的是配置文件做的服务的配置部署,另外也可在程序中编写代码来配置部署信息,但是并不赞成这种配置方式,因为这种配置方式不易更改,当你部署到客户环境后就不能再更改内部的代码结构,所以这种方式很不灵活,并不提倡使用这种方式来配置服务,但是可以作为了解,如下代码:

  1. namespace ConsoleApplication1
  2. {
  3. class Program
  4. {
  5. static void Main(string[] args)
  6. {
  7. using (ServiceHost host = new ServiceHost(typeof(ServiceReference1.Service1Client)))
  8. {
  9. host.AddServiceEndpoint(typeof(ServiceReference1.IService1),
  10. new WSHttpBinding(), "http://localhost:8733/Design_Time_Addresses/WcfServiceLibrary1/Service1");
  11. if (host.Description.Behaviors.Find<ServiceMetadataBehavior>() == null)
  12. {
  13. ServiceMetadataBehavior serviceMetadata = new ServiceMetadataBehavior();
  14. serviceMetadata.HttpGetEnabled = true;
  15. serviceMetadata.HttpGetUrl = new Uri
  16. ("http://localhost:8733/Design_Time_Addresses/WcfServiceLibrary1/Service1/metadata");
  17. host.Description.Behaviors.Add(serviceMetadata);
  18. }
  19. host.Open();
  20. ServiceReference1.IService1 service1 = new ServiceReference1.Service1Client();
  21. service1.GetData(1);
  22. Console.Write("fdsf");
  23. host.Close();
  24. }
  25. }
  26. }
  27. }

上面的代码中使用的是WSHttpBinding方式它支持双工通信,另外上面的宿主方式使用的是ConsoleApplication Host,这种host方式非常简单。在创建宿主程序时,需要为宿主指定宿主服务的类型,这里的类型要使用实现服务的类,最好不要使用接口类型。
创建宿主对象后,接下来为宿主添加了一个服务的终结点,终结点中第一个参数是指定了协议实现的类型,本例使用的是接口协议,所以要配置为相应的接口类型;第二个参数指定了绑定的类型;第三个参数则指定了终结点的URI地址,URI地址要配置服务具体实现的类URL地址。
接下来为宿主添加了一个行为(Behavior),并为行为公开了元数据,这种行为在创建时也可以不强加给服务,也就是说在添加宿主时,服务的行为定义是可选的,也可以不定义。

结语

本文主要针对WCF在客户端进行配置时所使用的基本的配置节做了详细的讨论,主要是Service、Binding和Behavior的应用,另外需要注意的是在客户端进行服务配置时不建议采用代码配置的方法,最好使用xml文件进行发布配置,这样能很好的修改。最后还有在添加WCF时一定要根据不同的类别添加需要的WCF,WCF中有类库和Application两种,它们所针对的Host是不同的,如果是类库的话往往用来配置Console Application作为Host,如果是Application类的往往用来配置网站服务,否则在使用时很容易出错。

来自 http://www.uml.org.cn/zjjs/201503125.asp 
相关参考资料:
http://www.uml.org.cn/zjjs/201503125.asp
http://www.cnblogs.com/weichuo/archive/2008/07/09/1238979.html

WCF配置文件详解的更多相关文章

  1. WCF配置文件详解 【转】

    ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 ...

  2. WCF配置文件详解(一)

    <?xml version="1.0" encoding="utf-8" ?><configuration>    <!-- &l ...

  3. WebConfig配置文件详解

    今天看到博客园一位朋友整理的一个WebConfig配置文件详解,觉得不错,转载一下: <?xml version="1.0"?> <!--注意: 除了手动编辑此文 ...

  4. Asp.net中web.config配置文件详解(一)

    本文摘自Asp.net中web.config配置文件详解 web.config是一个XML文件,用来储存Asp.NET Web应用程序的配置信息,包括数据库连接字符.身份安全验证等,可以出现在Asp. ...

  5. quartz配置文件详解

    quartz配置文件详解(转载)     quartz学习总结: 一.关于job:    用Quartz的行话讲,作业是一个执行任务的简单Java类.任务可以是任何Java代码.只需你实现org.qu ...

  6. tomcat配置文件详解

    Tomcat系列之服务器的安装与配置以及各组件详解   tomcat 配置文件详解

  7. ubuntu nginx 安装以及配置文件详解

    1.到nginx官网下载源码包.最好下载稳定版本,nginx官网http://www.nginx.org/ 2.安装nginx依赖包运行命令: sudo apt-get install libssl- ...

  8. Spring配置文件详解 – applicationContext.xml文件路径

    Spring配置文件详解 – applicationContext.xml文件路径 Java编程                 spring的配置文件applicationContext.xml的默 ...

  9. spring配置文件详解--真的蛮详细

    spring配置文件详解--真的蛮详细   转自: http://book.51cto.com/art/201004/193743.htm 此处详细的为我们讲解了spring2.5的实现原理,感觉非常 ...

随机推荐

  1. 应用层协议实现系列(三)——FTPserver之设计与实现

    在实现了HTTPserver之后.本人打算再实现一个FTPserver. 因为FTP协议与HTTP一样都位于应用层,所以实现原理也类似. 在这里把实现的原理和源代码分享给大家. 首先须要明白的是FTP ...

  2. Android面试准备 第二天 第五例 数据存储

    參考:http://blog.csdn.net/lmj623565791/article/details/24015867 5.Activity用SharedPreferences保存数据,大小有木有 ...

  3. 第一次使用docker for windows 遇到的坑

    原文:第一次使用docker for windows 遇到的坑 1. 目前win10安装docker, 不需要安装其他工具,可直接到官网下载 2. 此版本的docker可同时运行Windows con ...

  4. ios开发手势处理之手势识别二

    #import "ViewController.h" @interface ViewController ()<UIGestureRecognizerDelegate> ...

  5. 小强的HTML5移动开发之路(46)——汇率计算器【2】

    在上一篇中我们完成了汇率计算页面,下面来完成汇率设置页面的显示. <div class="setRates"> <div class="header&q ...

  6. 编程马拉松大赛试题及代码(C++实现)

    前段时间牛客网举办了编程马拉松大赛,总共86道题,20天内完毕. 题目难度难中易都有.我发现这些题目,主要关注性能和思维. 非常多题目用常规方法是不能通过时间要求的.题目是来自于各大oj以及面试题.所 ...

  7. log4erl Configuration

    https://github.com/ahmednawras/log4erl/blob/master/CONFIGURATION.txt Configuration Guide: ========== ...

  8. Oracle12c导入scott测试用户(转)

    登入DBA用户 connect sys as sysdba; 创建scott用户 create user c##scott identified by tiger;--用户名前加c##,12c要求 授 ...

  9. C#实现拼图游戏

    C#实现<拼图游戏> (下) 原理篇   前言:在 http://www.cnblogs.com/labixiaohei/p/6698887.html 程序设计 之 C#实现<拼图游 ...

  10. JS中构造函数与原型对象的同名属性,实例会取哪一个

    构造函数与原型对象的同名属性,实例会取哪一个? 看了下面的过程,再回忆JS高程3里关于这部分的示意图.实例my在new的时候,本身就获得了a属性,所以my.a是1,倘若在new的时候如果没有赋予a属性 ...