2011-02-11 53 views
1

我已经编写了一个客户端,它通过命名管道连接到服务器,并且它与我的服务器正常工作。但是,当我尝试连接到远程服务器时,它在调用Connect()时失败,并引发“请求不支持异常”,我不知道这意味着什么(尝试查看msdn,没有帮助)。有.NET命名管道和模糊例外的问题

这是相关的一段代码。我确信服务器和路径存在,因为另一个客户端(我的源看不到,但我知道它使用nxpipe)可以连接到它。

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

有没有人有任何想法是什么意思?

谢谢。编辑(求助): 你不会相信问题是什么。首先,订购该应用程序的人忘记运行服务器应用程序并打开管道,因此我们花了数小时试图弄清楚发生了什么,假设管道在远程机器上打开。在他记起他忘记运行服务器应用程序(几天后)之后,我们仍然遇到问题。那时我已经使用.NET管道编写了一个客户端,使用CreateFile编写了本地管道。结果这个人也忘了告诉我们管道的全名(虽然我们得到了“请求不支持”的无效管道名称)。幸运的是,我们有一个他们之前使用过的应用程序,其中有一部分管道名称是硬编码的(并且还需要指定其中的一部分),所以我们使用进程管理器来确定管道的全名并最终连接。现在它起作用了:|

+0

你有没有考虑到这一点? “对于Windows XP Professional和Windows 2000 Server,最多可以通过网络同时连接10个管道。” (源http://msdn.microsoft.com/en-us/library/system.io.pipes.namedpipeclientstream.aspx) – DaeMoohn 2011-02-11 14:31:02

+0

什么是异常堆栈跟踪?什么操作系统平台是你的客户和你的服务器? – 2011-02-11 15:40:04

回答

1

我认为这必须是Win32 IO异常(ERROR_NOT_SUPPORTED - 错误代码50)。如果是这样,它将来自RPC/SMB协议,通过该协议命名管道通信从一台机器到另一台机器。这意味着一方正试图调用另一方不支持的协议操作。

在你的上下文中,我想这意味着你试图启动命名管道通信的安全上下文与另一方支持的内容不兼容(或者可以想象,即使是一些防火墙,协议级别)。

如果双方都是Windows机器,我将首先检查使用NET USE启动端的安全上下文是否可以建立到另一端的IPC $共享的连接。我担心我对天秤座主机没有任何了解,或者这可能会造成什么影响。

1

命名管道只存在于当前机器内。你需要使用像TCP这样的东西来穿越机器边界。

编辑:

校正,根据this,能够跨越网络。我一定是错了,也许默认行为是拒绝访问NT AUTHORITY\NETWORK