【问题标题】:WCF Service Configuration Strange Behavior - The request message must be protectedWCF 服务配置奇怪行为 - 请求消息必须受到保护
【发布时间】:2011-10-07 21:18:32
【问题描述】:

我在 .NET 4.0 上,我有一个 wcf 服务,它实现了两个合同,一个具有保护级别,一个没有保护。两者都在 Action 和 ReplyAction 中指定“*”值。

现在,如果我在网站项目中配置此服务,一切正常,但如果我在 Web 应用程序项目中配置相同的服务,如果我尝试在浏览器中查看默认端点的服务页面,我会收到错误“请求消息必须受到保护,这是合同操作所必需的('IContractSigned'、'http://myservice/contracts')。保护必须由绑定提供('BasicHttpBinding'、'http: //tempuri.org/')。"

Web Site 项目和 Web Application 项目具有相同的 web.config。

现在我正在尝试投资,但找不到简单的解决方案或讨论。 任何想法? 为什么项目类型会以这种方式影响配置的正确性? 提前致谢

【问题讨论】:

    标签: wcf configuration wcf-security


    【解决方案1】:

    服务合约的 EncryptAndSign 保护级别要求绑定提供某种加密和唱歌方式,即绑定必须是安全的。

    也许您的服务使用传输级安全性,依靠 IIS 使用其服务器证书之一来保护通道?网站部署和 Web 应用部署之间的区别可能在于 IIS 使用服务器证书保护通道的能力。

    如果您使用消息模式安全性,您的服务必须声明要使用哪个证书,并且服务的部署方式不应有任何区别。

    【讨论】:

      【解决方案2】:

      我正在与同样的异常和found this

      作斗争

      当合约没有明确指定保护级别并且底层绑定支持安全性(无论是在传输级别还是消息级别)时,整个合约的有效保护级别是 ProtectionLevel.EncryptAndSign。如果绑定不支持安全性(如 BasicHttpBinding),则整个合约的有效 System.Net.Security.ProtectionLevel 为 ProtectionLevel.None。结果是,根据端点绑定,即使合约指定 ProtectionLevel.None,客户端也可能需要不同的消息或传输级别安全保护。

      因此,如果您未在 ServiceContract 属性中指定 ProtectionLevel,WCF 将根据您的 web.config 定义 ProtectionLevel。例如,如果您使用 Ws2007 和 BasicHttpBinding,BasicHttpBinding 将因您的异常而失败。那么你有3个选择:

      1. 删除合同的所有安全绑定,只保留 BasicHttpBinding。
      2. 在通过 BasicHttpBinding 公开的合约上设置保护级别,如下所示:

        [ServiceContract(ProtectionLevel = ProtectionLevel.None)]

      3. 为 BasicHttpBinding 提供一些安全性。

      【讨论】:

        猜你喜欢
        • 2021-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多