2011-01-28 84 views
3

在網絡驅動器上運行時,我們的C++解決方案(調用.NET 4.0程序集)存在一個奇怪的問題。該解決方案使用NetTcpBinding託管多個WCF服務,其中一個使用非默認綁定配置。非默認NetTcpBinding本身在部分信任下不可能(請參閱堆棧溢出問題When does WCF NetTcpBinding need full trust on the client?),但該解決方案在完全可信的網絡驅動器下運行。這並不工作在幾個不同的計算機(Windows Vista和Windows 7),但拋出一個異常失敗的一個(Windows Vista中),.NET程序集在網絡驅動器上部分信任運行,但所有其他信任完全信任

出錯創建「system.serviceModel /綁定」配置節處理程序:該程序集不允許部分受信任的呼叫者。 (K:\ Somepath \ Testing.exe.Config 6號線)

這個例外是完全以確定,如果解決方案的確會在該計算機上的部分信任模式下運行,但它確實在完全信任運行。即使我檢查完全信任代碼,它也是如此。

我們使用其中一臺計算機重新檢查了Internet選項 - 沒有差異。

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

更新: 網絡驅動器完全信任特定計算機(caspol.exe)。

我們應該尋找什麼?

如果您需要更多信息,請讓我知道。

更新2: 我們仍然有這個問題,現在甚至在一臺計算機上更多(Windows 7)。所以它似乎與操作系統無關。

+0

如果fulltrust組件調用調用另一個fullthrust組的部分信任域可以堅持一個partialtrust組裝。應該有一些設置來獲得「主要」信任而不是部分信任。關於使用完整的棧道而不是最小級別的棧道。對CAS沒有足夠的工作來記住。也許你必須在給出答案的代碼的某個地方「還原」信任,或者用一個額外的屬性來修飾它。 – CodingBarfield 2011-01-31 08:44:35

+0

我正面臨與.net 4.0項目相同的問題。你有沒有找到解決這個問題的辦法?我們啓用了LoadFromRemoteSources和Legacy激活等,但仍然出現錯誤 – praskris 2012-06-19 20:12:45

+0

我在我的答案中找到解決方法(在代碼中設置綁定設置,而不是在app.config中)後,我沒有再次研究它。如果你發現了什麼,請告訴我們:) – gumo 2012-06-20 07:41:53

回答

1

我們沒有在這裏找到一個解決方案,但解決方法:不要使用在app.config的綁定設置。在代碼中設置它們適用於我們在相同的環境中。

This問題的方式似乎處理類似的問題。 HTH

5

它被稱爲code access security(CAS),它強制所有不可信網絡驅動器被視爲不可信網絡代碼。

本地代碼具有完全信任,網絡代碼具有部分信任並且互聯網代碼沒有信任。這是一個純.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

右鍵單擊的app.config - >屬性 - > Unbock

相關問題