我在這裏讀到:Error 10048 when trying to open TcpChannel的TcpChannel註冊問題
我有什麼,我認爲是一個類似的問題 - 顯然不是。我拿了第一respondant的建議重置winsock的不管怎麼說,這是我的節目註冊(如何winsock的遭到損壞,無論如何?):
channel = new TcpChannel(channelPort);
ChannelServices.RegisterChannel(channel, false);
和客戶端調用:
// Create a channel for communicating w/ the remote object
// Notice no port is specified on the client
TcpChannel channel = new TcpChannel();
ChannelServices.RegisterChannel(channel, false);
// Create an instance of the remote object
CommonDataObject obj = Activator.GetObject(typeof(CommonDataObject) ,
"tcp://localhost:49500/CommonDataObject") as CommonDataObject;
這似乎太簡單了,以至於無法使用這樣的麻煩。但是,問題似乎與服務器的ChannelServices.RegisterChannel(...)。現在,我包含客戶端部分的原因是因爲客戶端實例檢查服務器對象。如果它找不到它,那麼它會'推動'服務器來實例化它自己。我想知道的是,如果首先檢查對象的可用對象(a la:Activator.GetObject(...))是否會導致ChannelServices'認爲'此tcp通道已被註冊?這聽起來很愚蠢,但那是我唯一可能的解釋。我已關閉防火牆,防真菌應用程序,並重新啓動。仍收到此
通道'tcp'已經註冊了 。
我看着我的堆棧跟蹤,並沒有通知:
at System.Runtime.Remoting.Channels.ChannelServices.RegisterChannelInternal(IChannel chnl, Boolean ensureSecurity)
at System.Runtime.Remoting.Channels.ChannelServices.RegisterChannel(IChannel chnl, Boolean ensureSecurity)
我想知道是否RegisterChannelInternal(...)可能是什麼原因造成的「已經registerd」的問題。所以,除此之外,我不知所措......
這可能是我正在檢查該頻道的呼叫導致它。如果這是共識,那麼我的問題就變成:我怎樣才能爲頻道進行投票?
更新: 從客戶端刪除服務器的初始檢查並'假設'服務器需要實例後,我確實發現客戶端檢查導致了問題。我設法讓服務器繼續運行,並且客戶端確實獲得了一個「透明代理」對象。但問題仍然存在:「我如何進行輪詢以發現服務器是否已實例化?」