.NET程序集在网络驱动器上以部分信任方式运行,但所有其他组件完全信任

时间:2011-01-28 11:24:37

标签: c# security .net-4.0 wcf-binding full-trust

在网络驱动器上运行时,我们的C ++解决方案(调用.NET 4.0程序集)存在一个奇怪的问题。该解决方案使用NetTcpBinding托管多个WCF服务,其中一个具有非默认绑定配置。在部分信任下,非默认的NetTcpBinding本身是不可能的(请参阅堆栈溢出问题 When does WCF NetTcpBinding need full trust on the client? ),但该解决方案在完全受信任的网络驱动器下运行。这适用于几台不同的计算机(Windows Vista和Windows 7),但在一台计算机上失败(Windows Vista)并抛出异常,

  

为“system.serviceModel / bindings”创建配置节处理程序时发生错误:该程序集不允许部分信任的调用方。 (K:\ Somepath \ Testing.exe.Config第6行)

如果解决方案确实在该计算机上的部分信任下运行,那么这个例外将是完全正常的,但它确实在完全信任下运行。即使我检查完全信任代码也是如此。

我们使用其中一台计算机双重检查了互联网选项 - 没有差异。

所有DLL文件和EXE文件都是强名称。

更新 特定计算机(caspol.exe)完全信任网络驱动器。

我们应该寻找什么?

如果您需要其他信息,请告诉我们。

更新2: 我们仍然有这个问题,现在甚至在一台计算机上(Windows 7)。所以它似乎与操作系统无关。

3 个答案:

答案 0 :(得分:6)

它被称为code access security(CAS),它强制将所有不受信任的网络驱动器视为不受信任的网络代码。

本地代码具有完全信任,网络代码具有部分信任,Internet代码无信任。它只是一个.NET安全模型。您可以选择将网络驱动器指定为“可信”驱动器,方法是为其提供完全权限(搜索caspol.exe完全信任网络驱动器)或将EXE文件复制到本地驱动器。

Using CASPOL to Fully Trust a Network Share 可以帮助您。

或者在命令行上:

CasPol.exe -m -pp off -ag 1.2 -url file://///server/share/* FullTrust .

答案 1 :(得分:1)

我们在这里找不到解决方案,但解决方法是:不要使用app.config进行绑定设置。在代码中设置它们适用于我们在相同的环境中。

顺便说一下,{p> This问题似乎处理了类似的问题。 HTH

答案 2 :(得分:-1)

右键点击app.config - >属性 - > Unbock