3

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

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

如果该解决方案确实在该计算机上的部分信任下运行,但它确实在完全信任下运行,则此异常完全可以。即使我检查对代码的完全信任也是如此。

我们用其中一台工作的计算机仔细检查了 Internet 选项 - 没有差异。

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

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

我们应该寻找什么?

如果您需要更多信息,请告诉我。

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

4

3 回答 3

6

它被称为代码访问安全(CAS),它强制将所有不受信任的网络驱动器视为不受信任的网络代码。

本地代码完全信任,网络代码部分信任,互联网代码不信任。它是仅 .NET 的安全模型。您的选择是通过授予其完全权限(搜索caspol.exe完全信任的网络驱动器)将网络驱动器指定为“受信任”驱动器,或者将 EXE 文件复制到本地驱动器。

使用 CASPOL 完全信任网络共享应该可以帮助您。

或者在命令行上:

CasPol.exe -m -pp off -ag 1.2 -url file://///server/share/* FullTrust .
于 2011-01-28T12:28:36.877 回答
1

我们在这里没有找到解决方案,但有一个解决方法:不要将 app.config 用于绑定设置。将它们设置在代码中对我们在相同的环境中有效。

顺便说一句,这个问题似乎处理了类似的问题。高温高压

于 2011-10-26T15:14:00.807 回答
-1

右键单击 app.config -> 属性 -> 取消绑定

于 2012-04-26T11:56:23.357 回答