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

标签 wcf soap

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

我最近发现默认情况下安全 session 是开启的(见 this SO question)。

我很惊讶默认情况下启用了这样的功能。我认为默认情况下我会得到最简单的配置,并且附加功能将基于选择加入。

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

所以我的问题是:默认启用的其他功能是什么,我该如何关闭它们?

最佳答案

这取决于:-) 像往常一样。

您想拥有一个面向外部的服务,网络外部的用户可以调用它吗?如果是这样,则使用 basicHttpBinding这与传统的 ASMX Web 服务基本相同(SOAP 1.1,非常基础,几乎没有任何安全性和可靠性功能)。或使用 wsHttpBinding (SOAP 1.2,WS-* 的东西)从一开始,但首先关闭所有功能。

有了 basicHttpBinding,以后就没有太多要“打开”的东西了——你有点卡住了,需要例如切换到 wsHttpBinding 或在基本功能之外创建您自己的自定义绑定(bind)。 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 Security Guidance它对大量不同的安全场景进行了分步解释,以及在 web.config 和 WCF 配置中为每个场景执行的操作。

关于wcf - 什么是最简单的 WCF/SOAP 配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1718810/

相关文章:

c# - WCF如何创建连接到同一个服务实例的两个 channel

wcf - 在不使用 WCF 的情况下调用 WCF 服务 - 好的还是坏的做法?

.NET WCF 无法解码 "Chunked"响应

android - SoapFault - 故障代码 : 'ns1:unexpected-error' android SOAP call

python - 在 python spyne 服务器中打印出整个 SOAP 请求

WCF 服务 : Status 200 with sc-win32-status of 64

c# - 通过 WCF 清理传入的 XML

java - 内部 Web 服务的最佳实践

java - 来自 WSDL 的 SOAP 网络服务端点

java - 从soap web服务返回ObjectId