2011-02-11 2 views
1

명명 된 파이프를 통해 서버에 연결하는 클라이언트를 작성했으며 서버에서 제대로 작동합니다. 그러나 원격 서버에 연결하려고하면 Connect()를 호출하면 "예외가 지원되지 않습니다."라는 예외가 발생하고 msdn에서 찾은 결과 도움이되지 않습니다..NET 명명 된 파이프 및 모호한 예외에 문제가 있음

이것은 관련 코드입니다. 다른 클라이언트 (소스는 볼 수 없지만 nxpipe를 사용한다는 것을 알고 있습니다)가 연결할 수 있기 때문에 서버와 경로가 존재한다고 확신합니다.

NamedPipeClientStream stream = new NamedPipeClientStream(serverName, pipeName, PipeDirection.InOut); 
stream.Connect(timeout); 

누구나 그 아이디어가 무엇입니까?

감사합니다.

EDIT (SOLVED) : 당신은 문제가 무엇인지 믿지 않을 것입니다. 먼저, 앱을 주문한 사람이 서버 앱을 실행하고 파이프를 열 것을 잊어 버렸습니다. 그래서 우리는 파이프가 원격 컴퓨터에서 열렸다고 가정하고 몇시간 동안 무슨 일이 일어나는지 알아 내려고 노력했습니다. 서버 앱을 실행하는 것을 잊은 것을 기억하고 (며칠 후) 여전히 문제가있었습니다. 그 시점에서 이미 .NET 파이프와 CreateFile을 사용하는 네이티브 파이프를 사용하여 클라이언트를 작성했습니다. 그 사람이 우리에게 파이프의 전체 이름을 알려주는 것을 잊어 버렸다. (잘못된 파이프 이름에 대해서는 "지원되지 않는다. 다행히도 우리는 이전에 사용했던 응용 프로그램을 사용 했었습니다.이 응용 프로그램은 하드 코딩 된 일부의 파이프 이름을 가지고 있었으므로 파이프 탐색기를 사용하여 파이프의 전체 이름을 확인하고 마지막으로 연결했습니다. 이제 작동합니다 : |

+0

이것을 고려해 보셨습니까? "Windows XP Professional 및 Windows 2000 Server의 경우 최대 10 개의 파이프가 동시에 네트워크를 통해 연결할 수 있습니다." (출처 http://msdn.microsoft.com/en-us/library/system.io.pipes.namedpipeclientstream.aspx) – DaeMoohn

+0

예외 스택 추적이란 무엇입니까? 클라이언트와 서버는 어떤 OS 플랫폼입니까? –

+0

불행히도 지금은 사무실에 없기 때문에 스택 추적을 제공 할 수는 없지만 예외가 NamedPipeClientStream.Connect()에서 발생한다고 말할 수 있습니다. 또한 클라이언트는 32 비트 윈도우 7에서 C#으로 작성된 작은 응용 프로그램이며 서버는 천칭 자리 메인 프레임입니다. – fingerprint211b

답변

1

이 코드는 Win32 IO 예외 (ERROR_NOT_SUPPORTED - 오류 코드 50) 여야합니다. 그렇다면 명명 된 파이프 통신이 한 컴퓨터에서 다른 컴퓨터로 원격으로 전송되는 RPC/SMB 프로토콜에서 나옵니다. 이는 한 쪽이 다른 쪽에서 지원하지 않는 프로토콜 작업을 호출하려고한다는 것을 의미합니다.

당신의 맥락에서 나는 당신이 명명 된 파이프 통신을 시작하려고하는 보안 컨텍스트가 다른 쪽에서 지원되는 것과 호환되지 않는다고 상상한다. 프로토콜 수준).

양측이 Windows 컴퓨터 인 경우 시작 측의 보안 컨텍스트가 다른 쪽의 IPC $ 공유에 대한 연결을 설정할 수 있는지 여부를 NET USE를 사용하여 확인합니다. 천칭 자리 메인 프레임에 대한 지식이 없거나이 차이점이 무엇인지 알지 못한다.

1

명명 된 파이프는 현재 컴퓨터에만 존재합니다. 머신 경계를 넘어 가기 위해 TCP와 같은 것을 사용할 필요가 있습니다.

EDIT :

보정, this에 따르면, 네트워크를 통해 가능하다. 내가 틀렸을 것입니다. 아마도 기본 동작은 NT AUTHORITY\NETWORK에 대한 액세스가 거부되었다는 것입니다.

+0

Microsoft 사이트의 경우 : "명명 된 파이프는 파이프 서버와 하나 이상의 파이프 클라이언트 간의 통신을 위해 단방향 또는 이중 파이프를 제공하며, 로컬 또는 네트워크를 통해 프로세스 간 통신에 사용할 수 있습니다. 여러 NamedPipeClientStream 개체 모든 프로세스는 명명 된 파이프 서버 또는 클라이언트 또는 둘 다로 작동 할 수 있습니다. " Link : http : //msdn.microsoft.com/en-us/library/system.io.pipes.namedpipeclientstream.aspx – DaeMoohn

+0

@DaeMoohn : 나는 또한 그것을 읽고 있었고, 나는 당신의 의견을 보았을 때 업데이트로 돌아왔다. 감사! –

+0

WCF 명명 된 파이프 만 컴퓨터 경계를 넘을 수 없습니다. – DaeMoohn