什么是最简单的WCF / SOAP配置?

时间:2009-11-11 23:25:17

标签: wcf soap

我们有一个WCF服务,我使用wsHttpBinding和传输安全性以及自定义身份验证。

我最近发现默认情况下会启用安全会话(请参阅this SO question)。

我很惊讶默认情况下此功能已启用。我认为默认情况下我会得到最简单的配置,其他功能将在选择加入的基础上。

我想从最简单的功能集开始,然后决定选择加入更多功能。

所以我的问题是:默认情况下启用的其他功能有哪些?如何关闭它们?

3 个答案:

答案 0 :(得分:5)

这取决于:-)按照惯例。

您是否希望拥有面向外部的服务,来自网络外部的用户可以拨打电话?如果是这样,那么使用basicHttpBinding,它与传统的ASMX Web服务基本相同(SOAP 1.1,非常基本,几乎没有任何安全性和可靠性功能)。或者从头开始使用wsHttpBinding(SOAP 1.2,WS- * stuff),但首先关闭所有功能。

使用basicHttpBinding,以后“开启”并不是很多 - 你有点困难,需要例如切换到wsHttpBinding或创建自己的自定义绑定超出该基本功能。 wsHttpBinding非常重,但大多数功能,如安全性,可靠性等,可以在以后关闭或重新启动。 但是并非每个客户端应用都可以连接到wsHttpBinding端点。

OR:使用多个端点!一个非常简单的使用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 Security Guidance,其中列出了大量不同安全方案的分步解释,以及如何在web.config和WCF配置中为每个方案做些什么。

答案 1 :(得分:1)

wsHttpBinding是一个非常复杂的绑定,用于在其上层叠大量的WS- * goo。 BasicHttpBinding可能是一个更好的起点 - 它只是简单的SOAP over HTTP-听起来更像你所追求的。它非常具有互操作性,但您以后仍然可以打开很多WS- *行为。

答案 2 :(得分:0)

可以使用wsHttpBinding的所有可能属性列表 - 您可以查看它们,并根据您的终端要求确定您要明确设置的属性。