这要看情况而定 :-)。
你是否想要一个外部可访问的服务,供网络外的用户调用?如果是这样,那么可以使用
basicHttpBinding
,它基本上与传统的 ASMX Web 服务相同(SOAP 1.1,非常基本,几乎没有安全性和可靠性特征)。或者一开始就使用
wsHttpBinding
(SOAP 1.2,WS-* 等),但首先关闭所有功能。
使用 basicHttpBinding,以后没有太多东西可以“打开”——你有点被卡住了,需要例如切换到 wsHttpBinding 或创建自己的自定义绑定来超越这些基本功能。wsHttpBinding 相当重量级,但大多数像安全性、可靠性等这样的功能可以稍后关闭或重新启用。但并不是每个客户端应用程序都能连接到 wsHttpBinding 终结点。
或者:使用多个终结点!一个使用 basicHttp 的真正简单的终结点供“遗留”客户端使用,一个使用 wsHttpBinding 的更高级的终结点——这就是 WCF 服务的优美之处——你只需编写一次服务代码,并将其公开在无数不同的终结点上,根据客户端的需要!
如果你是内部人员,在公司防火墙内,选择很容易——使用
netTcpBinding
——它很快(因为它使用二进制而不是文本编码)并且有很多可以调整的功能。
更新:由于这是一个外部可访问的服务,各种客户端可能会连接,我建议使用带有用户名/密码安全性的 basicHttpBinding。
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="wsMsgSec">
<security mode="Message">
<message clientCredentialType="None" establishSecurityContext="false" negotiateServiceCredential="false"/>
</security>
<reliableSession enabled="false"/>
</binding>
</wsHttpBinding>
</bindings>
<services>
<service name="YourService">
<endpoint
address=""
binding="wsHttpBinding"
bindingConfiguration="wsMsgSec"
contract="IYourServiceContract" />
</service>
</services>
</system.serviceModel>
在消息安全标记中,“clientCredentialType”可以使用“UserName”,但这种情况下,您需要设置一些基础设施(例如ASP.NET成员资格提供程序系统)来验证传入的用户名/密码凭据。
此外,一定要查看WCF安全指南,其中详细解释了各种不同安全方案的逐步操作,并说明如何在web.config和WCF配置中进行设置。
(链接)