【问题标题】:Securing WCF Service保护 WCF 服务
【发布时间】:2010-12-17 19:46:37
【问题描述】:

我正在尝试使用 ProtectionLevel 属性在 WCF Web 服务上设置安全性:

[ServiceContract(ProtectionLevel= ProtectionLevel.EncryptAndSign)]

这可以编译,但是当我尝试在另一个项目中更新服务引用时,Visual Studio 会引发异常(相同的解决方案)。

System.InvalidOperationException: 请求消息必须受到保护。 这是一个操作所需要的 合同 ('IStorageService','tempuri.org/';)。 保护必须由 捆绑 ('WSHttpBinding','tempuri.org/';)。

我还需要设置什么才能使其正常工作?

【问题讨论】:

  • System.InvalidOperationException:请求消息必须受到保护。这是合约操作所必需的 ('IStorageService','tempuri.org/')。保护必须由绑定提供('WSHttpBinding','tempuri.org/')。

标签: wcf web-services


【解决方案1】:

您的 ServiceContract 属性指定该服务需要一个安全通道进行所有操作,包括消息签名(消息包含可以证明它没有被篡改的数字签名)和消息加密(字节消息在通过网络传输时被加密)。

您的客户端代码(即在调用服务的项目中)必须满足这些要求。如果此项目使用默认设置的 BasicHttpBinding,则无法满足服务的要求(BasicHttpBinding 默认禁用安全性)。如果您将客户端项目配置为使用 WsHttpBinding,并使用其默认设置,则异常应该会消失(此绑定默认启用 EncryptAndSign)。

【讨论】:

    【解决方案2】:

    ProtectionLevel 是开发人员设置绑定必须遵守的最低级别的一种方式。部署服务时,配置中指定的实际绑定可能支持也可能不支持最低级别。例如,默认情况下,BasicHttpBinding 类不提供安全性(尽管可以启用)。因此,将它与具有除 None 以外的任何设置的合约一起使用将导致抛出异常。见here

    【讨论】:

      猜你喜欢
      • 2011-01-31
      • 1970-01-01
      • 1970-01-01
      • 2012-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多