WCF虽然好(具有互操作性的Web服务,分布式事务,支持WS标准,消息队列……),但是他要配置很多的东西在配置文件中,一旦有弄不好的地方,还得调试半天。如果以配置的方式为服务添加至少一个终结点,而终结点需要具备基本的ABC三要素。这个过程很是繁琐。有没有好的办法呢?小编,从网上找了一个伙计的博客,给大家分享一下。
基于.NET Framework 4.0的配置文件machine.config.comments(该配置文件所在的目录为%Windows%Microsoft.NET\Framework\v4.0.30319\Config),你会发现<protocolMapping>配置节具有如下的定义。
具体来说,<protocolMapping>配置节定义了四种传输协议(HTTP、TCP、Named Pipe和MSMQ)和对应的绑定类型(BasicHttpBinding、NetTcpBiding、NetNamedPipeBinding和NetMsmqBinding)之间的匹配关系。这实际代表了默认的协议绑定映射关系。
<span style="font-family:KaiTi_GB2312;font-size:18px;"> 1: <system.serviceModel>
2: <protocolMapping>
3: <add scheme="http" binding="basicHttpBinding" bindingConfiguration="" />
4: <add scheme="net.tcp" binding="netTcpBinding" bindingConfiguration=""/>
5: <add scheme="net.pipe" binding="netNamedPipeBinding" bindingConfiguration=""/>
6: <add scheme="net.msmq" binding="netMsmqBinding" bindingConfiguration=""/>
7: </protocolMapping>
8: ...
9: </system.serviceModel></span>
如果默认的协议与绑定映射关系不满足具体应用场景的要求,你可以直接修改machine.config或者基于具体应用的App.config或者Web.config。比如,对于上面的例子,如果为之添加一个配置文件并进行如下的配置:将基于HTTP的绑定类型设置为wsHttpBinding.
<span style="font-family:KaiTi_GB2312;font-size:18px;"> 1: <?xml version="1.0"?>
2: <configuration>
3: <system.serviceModel>
4: <protocolMapping>
5: <add scheme="http" binding="ws2007HttpBinding" />
6: </protocolMapping>
7: </system.serviceModel>
8: </configuration></span>
小结: 如此的话,,你也可以采用无配置的服务寄宿了,这主要得益于WCF提供的默认终结点机制。所谓默认终结点,顾名思义,就是在你尚未为寄宿的服务添加任何终结点的时候,WCF会自动根据服务的基地址(Base Address)为你创建一个或者多个默认的终结点。