2009-10-12 14 views
6

Tôi hiện đang tìm hiểu về các đường ống có tên trong Windows bằng cách sử dụng ASP.NET 3.5 và C#. Tôi đã viết một chương trình máy chủ nhỏ mà tạo ra một ống tên:Chỉ một khách hàng mới có thể kết nối với đường ống có tên

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

và một ứng dụng client mở ống như thế này:

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

này hoạt động tuyệt vời chừng nào chỉ có một client kết nối tới các đường ống . Cả hai có thể đọc và viết. Nếu tôi cố kết nối khách hàng thứ hai, mã không bao giờ vượt quá dòng

pipeStream.Connect(); 

Cả máy chủ và tất cả khách hàng đều đang chạy trên cùng một máy. Bất kỳ ý tưởng nào?

Cảm ơn bạn rất nhiều trước!

Trả lời

1

Cảm ơn sự trợ giúp nhanh chóng.

Tôi đã xử lý xử lý thực trong các chuỗi riêng biệt nhưng quên đề cập đến điều đó. Một đồng nghiệp tìm thấy vấn đề mặc dù:

Tôi đã có một StreamReader được bao quanh bởi một khối khác bằng cách sử dụng khối đăng tải NamedPipeServerStream đang sử dụng ở phía máy chủ.

Khi khối này kết thúc đóng StreamReader, nó cũng ngắt kết nối NamedPipeServerStream vì một lý do nào đó. Ngoài ra tôi đã không kèm theo đường ốngStream.WaitForConnection() trong một vòng lặp.

+1

vì vậy, bạn có thể đóng câu hỏi)) – 0100110010101

0

Đường ống thật (đường ống đó từ cửa hàng gian lận) có hai đầu. Vì vậy, tôi hy vọng rằng các đường ống được đặt tên cũng có chính xác hai thiết bị đầu cuối, một cho quá trình máy chủ và một cho quá trình khách hàng. Tuy nhiên, không có vấn đề gì là câu trả lời cuối cùng, tôi đề nghị để có một cái nhìn tại WCF - nó hỗ trợ ràng buộc ống net (và rất nhiều người khác như nhị phân TCP, SOAP có hoặc không có thông số kỹ thuật WS- * chỉ bằng cách thay đổi config) và xử lý kích hoạt máy chủ và đa luồng cho bạn. .net 3.5 có sẵn, vì vậy tôi chắc chắn sẽ chọn nó.