2011-02-11 50 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