2009-10-12 142 views
6

我目前在使用ASP.NET 3.5和C#學習Windows命名管道。 我寫了創建命名管道小型服務器程序:只有一個客戶端可以連接到命名管道

using (NamedPipeServerStream pipeStream = new NamedPipeServerStream(pipeName)) 
{ 
    pipeStream.WaitForConnection(); 
    // do sth. 
} 

和客戶端應用程序中打開這樣的管道:

using (NamedPipeClientStream pipeStream = new NamedPipeClientStream(pipeName)) 
{ 
    pipeStream.Connect(); 
    // do sth. 
} 

這個偉大的工程,只要只有一個客戶端連接到管。它可以讀寫。如果我嘗試連接第二個客戶端,代碼永遠不會超過線

pipeStream.Connect(); 

服務器和所有客戶端都在同一臺機器上運行。 任何想法?

非常感謝您提前!

回答

1

感謝您的快速幫助。

我已經在單獨的線程中處理了真正的處理,但忘了提到這一點。 一位同事發現這個問題,但:

我有一個StreamReader封裝在服務器端發佈的NamedPipeServerStream使用塊中的另一個使用塊。

當此塊完成關閉StreamReader時,由於某種原因它也斷開了NamedPipeServerStream。此外,我沒有在循環中包含pipeStream.WaitForConnection()。

+1

所以,你可能會關閉這個問題)) – 0100110010101 2009-10-13 08:18:18

0

一個真實的管道(來自hardwre商店的)有兩個結尾。所以我期望命名管道也有兩個端點,一個用於服務器進程,另一個用於客戶端進程。但是,無論最終答案是什麼,我都會建議看一下WCF - 它支持網管綁定(以及許多其他的像二進制TCP,SOAP或者沒有WS- *規範,只需通過更改配置)併爲您處理服務器激活和多線程。 .net 3.5是可用的,所以我肯定會選擇它。

相關問題