只是爲了得到開箱即用的時刻,你有沒有想過使用WCF與MSMQ?我不確定我是否完全理解你是體系結構,但聽起來像API的客戶端需要啓動另一個承載API的進程。在啓動API主機和客戶端嘗試撥打電話之間可能存在計時問題。微軟最近棄用.NET Remoting(以及其他以前的通信技術,如ASMX Web服務)作爲傳統,並強烈建議開發人員轉向WCF平臺。
如果您在MSMQ中使用WCF,您應該沒有時間問題。無論API主機是否正在運行,您的客戶端應用程序都可以將消息放入持久隊列中。 API主機可以在任何時候啓動,並且會接收並處理隊列中等待的任何消息。即使您仍然有客戶端應用程序啓動API主機,計時問題也不再是一個問題,因爲您使用排隊傳輸消息而不是.NET Remoting。 WCF圍繞MSMQ提供了一個很好的,方便的,易於使用的包裝,因此進入的門檻相對較低。
在.NET Remoting上使用WCF的另一個優點是,您可以輕鬆地將API主機移動到不同的物理服務器,而無需更改客戶端應用程序。如果您願意,您甚至可以移動到不同的排隊平臺(例如AMQP上的RabbitMQ),而無需更改客戶端或API主機應用程序。 WCF爲您處理所有這些交互操作,爲您的客戶端應用程序和API主機提供更加乾淨的解耦和更可靠的通信。
如果移動到WCF不是一個選項,您應該能夠使用.NET Remoting顯式設置端口。我不知道你如何配置你的API的主機,但對於任何給定的遠程對象的URL通常是形式:
tcp://<hostname>[:<port>]/<object>
如果添加端口,那麼你應該能夠使用Abhijeet的解決方案確定端口是否打開。你不會獲得WCF的鬆耦合和可靠的通信優勢,但它肯定會減少工作量。 ;)
Jon Skeet!你必須知道答案! = [ – snicker 2009-09-28 21:13:04