Возникли проблемы с именованными каналами .NET и неоднозначными исключениями - PullRequest
1 голос
/ 11 февраля 2011

Я написал клиента, который подключается к серверу через именованный канал, и он отлично работает с моим сервером. Тем не менее, когда я пытаюсь подключиться к удаленному серверу, происходит сбой при вызове Connect () и выдается «Запрос не поддерживается исключение», и я понятия не имею, что это значит (попытался посмотреть на msdn, не помогло).

Это соответствующий фрагмент кода. Я уверен, что сервер и путь существуют, потому что другой клиент (чей источник я не вижу, но я знаю, что он использует nxpipe) может подключиться к нему.

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

У кого-нибудь есть идеи, что это значит?

Спасибо.

РЕДАКТИРОВАТЬ (РЕШЕНО): Вы НЕ ВЕРЬТЕ, в чем проблема. Во-первых, парень, который заказал приложение, забыл запустить серверное приложение и открыть канал, поэтому мы часами пытались выяснить, что происходит, предполагая, что канал открыт на удаленной машине. После того, как он вспомнил, что забыл запустить серверное приложение (несколько дней спустя), у нас все еще были проблемы. На тот момент я уже написал клиент, использующий каналы .NET, и нативные каналы, использующие CreateFile. Оказывается, парень также забыл сказать нам полное имя канала (странно, что мы получили «запрос не поддерживается» для неверного имени канала). К счастью, у нас было приложение, которое они использовали ранее, в котором часть имени этого канала была жестко запрограммирована (и часть, которую вы все еще должны были указать), поэтому мы использовали обозреватель процессов, чтобы выяснить полное имя канала и, наконец, подключились. Теперь это работает: |

Ответы [ 2 ]

1 голос
/ 13 февраля 2011

Я думаю, что это должно быть исключение ввода-вывода Win32 (ERROR_NOT_SUPPORTED - код ошибки 50).Если это так, то это будет происходить из протокола RPC / SMB, по которому обмен данными по именованным каналам удален с одной машины на другую.Это означает, что одна сторона пытается вызвать операцию протокола, которая не поддерживается другой стороной.

В вашем контексте я представляю, что это означает, что контекст безопасности, из которого вы пытаетесь инициировать связь по именованному каналу, несовместим с тем, что поддерживается другой стороной (или, возможно, даже между каким-то межсетевым экраном, между которыми есть правилана уровне протокола).

Если бы обе стороны были компьютерами Windows, я бы начал с проверки с помощью NET USE, может ли контекст безопасности на инициирующей стороне установить соединение с общим ресурсом IPC $ на другой стороне.Боюсь, я ничего не знаю о мэйнфреймах Весов или о том, что это может изменить.

1 голос
/ 11 февраля 2011

Именованные каналы существуют только внутри текущего компьютера. Вам нужно использовать что-то вроде TCP для пересечения границы машины.

EDIT:

Исправление, согласно this , возможно по сети. Должно быть, я ошибся, и, возможно, поведение по умолчанию таково, что доступ к NT AUTHORITY\NETWORK запрещен.

...