WCF的基础ABC和Endpoint,对于常见的场景如果这么多的组合显然也很复杂,实际的应用中根据具体的场景选择对应的方式
图书”Programming WCF Services”(WCF服务编程) 对这个组合进行了详细的总结,如下:
【对于WCF的基础知识可以参阅图书或其他资料】
绑定和安全场景
绑定 |
局域网场景 |
互联网 |
B2B场景 |
匿名场景 |
无安全场景 |
BasicHttpBinding |
No |
No |
Yes |
No |
Yes |
NetTcpBinding |
Yes |
Yes |
No |
Yes |
Yes |
NetPeerTcpBinding |
No |
No |
No |
No |
Yes |
NetNamedPipeBinding |
Yes |
No |
No |
No |
Yes |
WSHttpBinding |
No |
Yes |
Yes |
Yes |
Yes |
WSFederationHttpBinding |
No |
No |
No |
No |
|
WSDualHttpBinding |
No |
Yes |
Yes |
Yes |
Yes |
NetMsmqBinding |
Yes |
No |
No |
Yes |
Yes |
安全场景特性
特性 |
局域网场景 |
互联网 |
B2B场景 |
匿名场景 |
无安全场景 |
Transport |
Yes |
No |
No |
No |
No |
Message |
No |
Yes |
Yes |
Yes |
No |
Service authentication |
Windows |
Ceritificate |
Ceritificate |
Ceritificate |
No |
Client authentication |
Windows |
ASP.NET |
Ceritificate |
No |
No |
Authorization |
Windows |
ASP.NET |
No/ASP.NET |
No |
No |
Impersonation |
Yes |
No |
No |
No |
No |
实现参考
该书描述了一个基于声明的框架类库,使用这个库可以方便的建立以上不用场景的应用,基于这个我实现了一个demo的演示,通过这个过程对WCF有了比较深入的了解,对于小组人员的入门和快速使用比较有用。
demo下载地址: http://cid-56b433ad3d1871e3.office.live.com/self.aspx/.Public/ProgWCF.rar
详细运行参考代码中的Readme.txt和注释
Intranet |
Transport保护 使用tcp绑定 windows集成的安全 |
Internet |
只能使用Message形式的保护,需要数字证书 tcp wsHttp绑定 使用Membership进行安全认证 |
Anoymous |
使用Message形式的保护,需要数字证书 tcp wsHttp绑定 |
None |
消息不保护 http tcp wsHttp绑定 |
B2b |
BasicHttpBinding WSHttpBinding WSDualHttpBinding |
参考:Programming WCF Services [ISBN: 978-0-596-80548-7]
对WCF的使用进行分类的介绍,实际开发完成涉及到部署的问题,根据如下的资料参考实际情况选择部署方式
部署方式:自承载、IIS承载和Appfabric承载
IIS服务承载
使用svc扩展实现,如下配置
<add path="*.svc"
verb="*"
type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
validate="false" />
</httpHandlers>
如何使IIS能够承载net.tcp等其他协议
两步配置:
网站绑定加上net.tcp
支持的协议增加net.tcp
然后添加的svc服务自动就支持了http和net.tcp绑定
手动设置无svc文件的服务
<serviceHostingEnvironment multipleSiteBindingsEnabled="true">
<serviceActivations>
<!--无svc的服务,须在IIS中net.tcp协议才能启用-->
<add relativeAddress="demo.svc" service="WCfSvc.DemoWcf" />
</serviceActivations >
</serviceHostingEnvironment>
<services>
<service name="WCfSvc.DemoWcf">
<!--多个终结点的不同协议支持-->
<endpoint address="ws" binding="wsHttpBinding" name="http" contract="Contracts.ICarRentalService"/>
<endpoint binding="basicHttpBinding" name="http" contract="Contracts.ICarRentalService"/>
<endpoint binding="netTcpBinding" name="tcp" contract="Contracts.ICarRentalService"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors
Hosting的选择
根据以上的表选择适合的部署方式即可