【问题标题】:WCF in Partial trust environment部分信任环境中的 WCF
【发布时间】:2010-01-12 13:35:19
【问题描述】:

我已通过 WCF 部署到主机,而我的 ASP.NET 站点正在尝试使用相同的服务。

我收到此错误:

名为 BasicHttpBinding 的绑定 验证失败,因为它包含 具有类型的 BindingElement System.ServiceModel.Channels.MtomMessageEncodingBindingElement 部分不支持 相信。考虑使用 BasicHttpBinding 或 WSHttpBinding,或 将您的应用程序托管在 完全信任的环境。描述: 期间发生未处理的异常 当前网络的执行 要求。请查看堆栈跟踪 有关错误的更多信息 以及它起源于代码的位置。

异常详情: System.InvalidOperationException: 名称为 BasicHttpBinding 的绑定 验证失败,因为它包含 具有类型的 BindingElement System.ServiceModel.Channels.MtomMessageEncodingBindingElement 部分不支持 相信。考虑使用 BasicHttpBinding 或 WSHttpBinding,或托管您的 完全信任的应用程序 环境。

我该如何解决这个问题?

【问题讨论】:

  • WCF 主机和 ASP.NET 主机是否在同一个域中?
  • 另外,您的服务提供商是谁?例如,是 GoDaddy 吗?
  • Kris:WCF 由一个提供商托管[不确定由决定选择自己的提供商并试图收集该信息的客户执行此操作的人是谁]。 asp.net 托管在客户端中...它们不在同一个域中

标签: c# wcf


【解决方案1】:

正如它所说的:不要使用 MTOM,或者在完全信任的环境中托管。

短信编码:

<system.serviceModel>
    <bindings>
      <basicHttpBinding>
          <binding name="myBinding" messageEncoding="Text">
          </binding>
      </basicHttpBinding>
    </bindings>
</system.serviceModel>

大多数共享托管服务提供商只会提供部分信任的 .NET 托管服务。您将需要一台(半)专用机器以获得完全信任,或者在互联网上四处寻找愿意冒险的共享托管服务提供商。

【讨论】:

    【解决方案2】:

    您不能“绕过”部分信任主机来运行需要完全信任的代码。

    你有两个选择。首先,遵循错误消息的建议并使用不需要完全信任的绑定。或者,第二,您可以找到一个可以完全信任地运行您的代码的主机。

    【讨论】:

    • 是什么让绑定需要完全信任?
    【解决方案3】:

    你有不同的选择

    • 使用其他绑定
    • 让您的代码完全信任(这不是一个好主意,并且在许多公司环境和数据中心中是不允许的)
    • 保持您的代码部分受信任,但将 WCF 调用封装到一个完全受信任的程序集中,该程序集为调用者声明所需的权限(这需要仔细检查程序集等)

    让我用一个例子来详细说明第三个选项。假设您有一个方法调用 MakeServiceCallToDangerousSite(string siteUrl)。您需要从部分受信任的代码中调用它,您不希望它被滥用。该怎么办? 首先,您可以避免从调用者那里获取“危险站点”网址,即 MakeServiceCallToDangerousSite()。 其次,既然您完全控制了该调用,您可以以声明方式(在方法级别)或命令方式(即,permission.Assert(); try{ DangerousCall() ; }最后{CodeAccessPermission.RevertAssert();} 第三,程序集需要被完全信任,为此,您需要它在 GAC 中,这也需要程序集是强命名的。 我希望这会有所帮助,至少可以作为 MSDN 上更好解释的指针:-)

    【讨论】:

    • Ariel:如何处理您的第三个选项 - '让您的代码部分受信任,但将 WCF 调用封装到一个完全受信任的程序集中,该程序集为调用者声明所需的权限(这需要仔细检查程序集审查等)'
    • Itech - 我更新了我的编辑(这里不适合),希望对您有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    相关资源
    最近更新 更多