部分信任环境中的WCF

时间:2010-01-12 13:35:20

标签: c# wcf

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

我收到此错误:

  

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

     

异常详细信息:   System.InvalidOperationException:The   使用名称BasicHttpBinding绑定   因为它包含失败的valiadation   一个带类型的BindingElement   System.ServiceModel.Channels.MtomMessageEncodingBindingElement   部分不支持   信任。考虑使用BasicHttpBinding   或WSHttpBinding,或托管您的   在完全信任中申请   环境。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

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

短信编码:

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

大多数共享托管服务提供商只提供部分信任.NET托管。您需要一台(半)专用机器才能获得完全信任,或者在互联网上浏览一下想要冒险的共享托管服务提供商。

答案 1 :(得分:1)

您无法“绕过”部分信任主机,以便运行需要完全信任的代码。

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

答案 2 :(得分:0)

您有不同的选择

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

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