我正在爲使用遠程處理的傳統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有一個看起來像這樣的問題,但看起來不一樣。
是否有防火牆,你的機器上阻塞端口80? – 2015-03-02 13:19:22
其實本地主機只是檢驗,被測系統駐留在另一臺服務器上。從同一臺電腦上,我可以連接和使用控制檯應用程序的遙控器,所以端口不是問題。 – savpek 2015-03-03 06:15:13