2015-03-02 85 views
2

我正在爲使用遠程處理的傳統api編寫系統範圍的測試。如果我從例子中調用它,遠程處理正在工作:控制檯應用程序。來自nunit測試的C#Remoting(legacy)導致安全異常

但是下面從NUnit的項目代碼:

((FooBar)System.Activator.GetObject(typeof (FooBar), "http://localhost/FooBar.rem")).SomeMethod("abc"); 

,出現異常失敗:

System.Security.SecurityException : Type System.Runtime.Remoting.ObjRef and the types derived from it (such as System.Runtime.Remoting.ObjRef) are not permitted to be deserialized at this security level. 

此異常的許多指針顯示在服務器端的安全設置的變化,但因爲服務器與其他消費類作品它似乎安全問題在客戶端。

我曾嘗試添加:

 var clientProvider = new BinaryClientFormatterSinkProvider(); 
     IDictionary props = new Hashtable(); 

     const int httpConnectionLimit = 100; 
     const int httpTimeout = 30*1000; 

     props["clientConnectionLimit"] = httpConnectionLimit; 
     props["timeout"] = httpTimeout; 

     var channel = new HttpChannel(props, clientProvider, null); 
     ChannelServices.RegisterChannel(channel, false); 

無影響。

跑步者是resharper 9.也嘗試過MS跑步者,但似乎失敗了同樣的錯誤。

不幸的是,在這個重構舊系統的時候,使用像休息這樣的現代技術來進行通信不是一種選擇。

經測試與Nunit 2.6.3和2.6.4。 2.6.2有一個看起來像這樣的問題,但看起來不一樣。

+0

是否有防火牆,你的機器上阻塞端口80? – 2015-03-02 13:19:22

+0

其實本地主機只是檢驗,被測系統駐留在另一臺服務器上。從同一臺電腦上,我可以連接和使用控制檯應用程序的遙控器,所以端口不是問題。 – savpek 2015-03-03 06:15:13

回答

1

下面的問題是,這是NUnit的bug。

https://github.com/nunit/nunit/issues/522

+0

請注意,NUnit團隊將該項目關閉爲非A Bug。對故障單的評論顯示了一種解決方法,其中客戶機提供商需要將TypeFilterLevel設置爲Full。 – Pedro 2015-10-23 17:20:34