我正在嘗試爲第三方應用程序建立.Net遠程調用。這裏的(除去專有名稱)示例代碼中我一直在考慮該連接:遠程處理調用永不返回。可能遠程衝突?
IDictionary props = new ListDictionary();
props["port"] = 0; // have the Remoting system pick a unique listening port (required for callbacks)
props["name"] = string.Empty; // have the Remoting system pick a unique name
BinaryServerFormatterSinkProvider serverProv = new BinaryServerFormatterSinkProvider();
serverProv.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;
_channel = new TcpChannel(props, new BinaryClientFormatterSinkProvider(), serverProv);
ChannelServices.RegisterChannel(_channel, true);
IThirdparty _thirdparty = (IThirdparty)Activator.GetObject(typeof(IThirdparty), "tcp://localhost:9090/Thirdparty.AppIntegration");
//Example API call
_thirdparty.Minimized = !_thirdparty.Minimized;
當該代碼被通常稱爲,它掛在_thirdparty.Minimized
和輸出SocketException
與消息的診斷窗口:
No connection could be made because the target machine actively refused it
如果我關閉第三方應用程序,該調用只會返回。
我檢查了netstat -bano
並且在端口9090上運行的唯一應用程序是我試圖連接的應用程序。
所以我把電話轉到Main()
函數的前幾行,在我的應用程序中,它工作得很好。問題是,這不是它應該在的地方。
我的應用程序包含很多其他遠程調用到另一臺服務器(不在端口9090)以及WCF服務。我的猜測是這些事情之一是干涉。
關於如何找出爲什麼這個遠程調用永不返回的任何想法?
更新: 我已經確定SocketException可能是一個紅色的鯡魚當它工作在第三方測試程序這些異常被創建。另外,它看起來像懸掛的原因是因爲它正在等待一個永遠不會獲取任何數據的Socket.Read()。