2009-10-12 3 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

빠른 도움을 주셔서 감사합니다.

이미 실제 처리를 별도의 스레드에서 처리했지만 언급하지 않았습니다. 동료가 문제를 발견했습니다.

서버 쪽 게시 된 NamedPipeServerStream- 사용 블록에 다른 사용 블록으로 묶인 StreamReader가 있습니다.

이 블록이 StreamReader를 닫으면 어떤 이유로 든 NamedPipeServerStream의 연결이 끊어집니다. 또한 pipeStream.WaitForConnection() 루프에 묶는 않았습니다.

+1

그래서 질문을 닫을 수 있습니다.)) – 0100110010101

0

실제 파이프 (하드웨어 저장소의 파이프)에는 두 개의 엔딩이 있습니다. 따라서 Named Pipe에는 정확히 두 개의 엔드 포인트가 있습니다. 하나는 서버 프로세스 용이고 다른 하나는 클라이언트 프로세스 용입니다.

그러나 최종 답이 무엇이든 WCF를 살펴볼 것을 제안합니다. Net Pipe 바인딩을 지원합니다 (바이너리 TCP, SOAP, WS- * 사양을 포함하거나 포함하지 않은 SOAP를 많이 지원합니다). config)를 실행하고 서버 활성화 및 멀티 스레딩을 처리합니다. .net 3.5를 사용할 수 있으므로 확실히 선택할 수 있습니다.

관련 문제