无论是Web应用程序还是Win应用程序,我们都会经常用到配置文件。WCF作为分布式开发的基础框架,在定义服务以及定义消费服务的客户端时,都使用了配置文件的方法。配置文件的重要性和实用性是大家所熟知的,它可以给我们WCF开发的灵活性上带来很大的提高。下面说说我学习使用配置文件的所得。

WCF的配置使用.NET Framework的System.Configuration配置系统。在Visual Studio中配置一个WCF服务时,如果是自托管宿主或Windows Services宿主,则配置文件为App.confing,如果是IIS宿主,则配置文件为Web.config。

先来看看简单的system.ServiceModel结构

Code<system.ServiceModel><services><service><endpoint/></service></services><bindings><!—定义一个或多个系统提供的binding元素,例如<basicHttpBinding> --> <!—也可以是自定义的binding元素,如<customBinding>. --><binding><!—例如<BasicHttpBinding>元素. --></binding></bindings><behaviors><!—一个或多个系统提供的behavior元素. --><behavior><!—例如<throttling>元素. --></behavior></behaviors></system.ServiceModel>

(1)<services>

服务是在配置文件的 services 节中定义的。每个服务都有自己的 service 配置节。在Service中定义特定服务的address,binding,contract(也就是传说中重要的ABC)。

Code        <services><service name="WCFStudent.WCFStudentText" behaviorConfiguration="ServiceBehavior"><endpoint address="" binding="wsHttpBinding" contract="WCFStudent.IStuServiceContract"></endpoint><endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/></service></services><!--一个Service中可以有多个endpoint,这样就可以同时定制多个服务。如果address值为空,那么endpoint的地址就是默认的基地址(Base Address)。那么则需要在host中声明Base Address-->

(2)<bindings>

此节包含标准绑定和自定义绑定的集合。每一项都是一个可由其唯一 name 进行标识的 binding 元素。服务通过用 name 与绑定进行链接来使用绑定。

个人感觉比较常用的是<basicHttpBinding>,<basicHttpBinding>等。由于属性比较多,在这里就不一一说明了。

Code<bindings><basicHttpBinding><binding name="IStuServiceContract" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                    messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
                    allowCookies="false"></basicHttpBinding></bindings><!--相应属性的设置大家可以参看MSDN.
http://msdn.microsoft.com/zh-cn/library/ms731361.aspx-->

(3)<behaviors>

此元素定义名为 endpointBehaviorsserviceBehaviors 的两个子集合。每个集合分别定义终结点和服务所使用的行为元素。每个行为元素由其唯一的 name 属性标识。如果需要指定服务在执行方面的相关特性时,就必须定义服务的behavior。在WCF中,定义behavior就可以设置服务的运行时属性,甚至于通过自定义behavior插入一些自定义类型。

Code<behaviors><serviceBehaviors><behavior name="ServiceBehavior"><!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false 并删除上面的元数据终结点  --><serviceMetadata httpGetEnabled="true"/><!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息--><serviceDebug includeExceptionDetailInFaults="false"/></behavior></serviceBehaviors></behaviors>

(4)<client>

有的时候我们还需要定义<client>节点,主要定义客户端可以连接的终结点的列表。

Code<client><endpoint address="http://localhost:39113/WCFServiceText/WCFStudentText.svc"
                binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IStuServiceContract"
                contract="ServiceReference1.IStuServiceContract" name="WSHttpBinding_IStuServiceContract"><identity><dns value="localhost" /></identity></endpoint></client><!--如果宿主是IIS,WIN应用程序调用WCF时,会自动在App.config中生成<client>节的设置-->

三种宿主形式的配置文件的声明基本上一样。如果使用svcutil.exe生成客户程序,会在svcutil.exe的根目录中生成一个配置文件,值得大家一看:

Code<?xml version="1.0" encoding="utf-8"?><configuration><system.serviceModel><bindings><wsHttpBinding><binding name="WSHttpBinding_IStuServiceContract" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                    messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
                    allowCookies="false"><readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" /><reliableSession ordered="true" inactivityTimeout="00:10:00"
                        enabled="false" /><security mode="Message"><transport clientCredentialType="Windows" proxyCredentialType="None"
                            realm="" /><message clientCredentialType="Windows" negotiateServiceCredential="true"
                            algorithmSuite="Default" establishSecurityContext="true" /></security></binding></wsHttpBinding></bindings><client><endpoint address="http://localhost:39113/WCFServiceText/WCFStudentText.svc"
                binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IStuServiceContract"
                contract="IStuServiceContract" name="WSHttpBinding_IStuServiceContract"><identity><dns value="localhost" /></identity></endpoint></client></system.serviceModel></configuration>

文章作者:高维鹏(Brian)
    文章出处:http://www.cnblogs.com/gaoweipeng
    欢迎转载,转载时请注明出处。谢谢合作。

学习 WCF (4)--学会使用配置文件相关推荐

  1. 学习 WCF (6)--学习调用WCF服务的各种方法

    根据不同的情况,我们可以用不同的方法调用WCF服务,本文简单总结了一下调用WCF的一些方法(代理类,Ajax...),分享给大家.开发工具调用WCF 这中方法很方便也很简单,很多工作VS就帮我们完成了 ...

  2. 学习 WCF (5)--学习Binding的使用

    网络通信离不开网络协议的支持,在WCF中,给发开人员提供了很多传输协议进行绑定.比如:BasicHttpBinding,NetTcpBinding,WSHttpBinding 等等.对于初学者来说,很 ...

  3. 学习 WCF (1)--基础篇

    Windows Communication Foundation(WCF)是一个面向服务编程的综合分层架构.该架构的顶层称为服务模型层(Service Model Layer),使用户用最少的时间和经 ...

  4. 一步一个脚印学习WCF系列之WCF概要—生成元数据与代理(五)

    阅读目录 一:契约与元数据 二:服务描述与元数据 一:契约与元数据 . 客户端与服务端之间共享的应该是Contract契约而不是代码,就是前面我们讲的文章"一步一个脚印学习WCF之WCF概要 ...

  5. 初学者先学python语音好吗_献给Python初学者 零基础学习Python能学会吗

    献给Python初学者 零基础学习Python能学会吗 时间:2018-01-08     来源:零基础学习Python方法讲解 零基础学习Python能学会吗?这个问题几乎是所有初学Python的小 ...

  6. WCF分布式开发步步为赢(0):WCF学习经验分享,如何更好地学习WCF?

    WCF分布式开发学习,应该从哪里开始? 微软WCF Web服务 Web API学习群 339444457 微软ASP.NET MVC 4 Web编程群     44206115 学习WCF是不是就不需 ...

  7. [zz]WCF分布式开发步步为赢(0):WCF学习经验分享,如何更好地学习WCF?

    WCF分布式开发学习,应该从哪里开始?    学习WCF是不是就不需要学习Enterprise Sevices(COM+).Net Remoting.Web Service(ASMX).WSE3.0和 ...

  8. python异常处理_Python学习点滴04 - 学会异常处理(2)

    前言 我们在开发Python程序时经常会遇到一些错误(语法错误和异常),尤其是程序代码发生异常(Exceptions)时,如果不能及时捕获异常和有效处理异常,则程序运行会被终止,有可能会造成相应的后果 ...

  9. WCF学习经验分享,如何更好地学习WCF?

    WCF分布式开发学习,应该从哪里开始? 学习WCF是不是就不需要学习Enterprise Sevices(COM+).Net Remoting.Web Service(ASMX).WSE3.0和MSM ...

最新文章

  1. 在小程序中实现 Mixins 方案
  2. kubectl技巧之通过go-template截取属性
  3. Android 开发 Activity里获取View的宽度和高度 转载
  4. php 调用java webservice
  5. spring框架(三)mvc
  6. 网页挂码方式html css,CSS代码 解决网页挂马问题
  7. 重大变动:OpenCV拟更改授权协议!
  8. cshop是什么开发语言_国内程序员那么多,为什么不开发一个属于自己的编程语言?...
  9. 【编程语言之Python】之plt画图尺寸、去白边
  10. Enterprise Library Step By Step系列(十六):使用AppSetting Application Block
  11. java引用型变量_java-有没有办法用类型变量引用当前类型?
  12. c语言程序如何链接到数据库,c语言如何链接到数据库
  13. 按键弹起数字增加和按下增加
  14. 中科院-杨力祥视频教程 02课程
  15. 量子计算机需要的基础,量子计算入门
  16. 网页设计_导航条_下拉菜单
  17. hwaddr和macaddr的区别
  18. CVPR 2021 论文大盘点-超分辨率篇
  19. 搭建网站服务器必须开443端口,记录解决网站443端口不通的问题(启动HTTP或者更换域名)...
  20. kdd99数据集svm分类_使用svm和不平衡的twitter数据集进行三级情感分类的任务

热门文章

  1. QT的QTextCodec类的使用
  2. QT的QNdefRecord类的使用
  3. c++异常处理的基本思想
  4. python 傅立叶函数_python 图像的离散傅立叶变换实例
  5. Ibatis动态(dynamic)查询
  6. 项目中的一个JQuery ajax实现案例
  7. oracle 最小系统,基于最小化CENTOS6.6最小化安装,oracle 11g 数据安装过程!
  8. OpenCV中图像垂直拼接函数vconcat的使用
  9. OpenCV图像颜色模型转换:cvtColor函数的使用
  10. canvas基础-绘制矩形(1)