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

Какова трассировка стека исключений? Какая платформа (ы) ОС - ваш клиент и ваш сервер? –

+0

К сожалению, я сейчас не в офисе, поэтому я не могу дать вам трассировку стека, но могу вам сказать, что исключение выбрано из NamedPipeClientStream.Connect(). Кроме того, клиент представляет собой небольшое приложение, написанное на C# в 32-битном Windows 7, а сервер - это мейнфрейм Libra далеко далеко. – fingerprint211b

ответ

1

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

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

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

1

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

EDIT:

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

+0

С сайта Microsoft: «Именованные каналы предоставляют односторонние или дуплексные каналы для связи между сервером каналов и одним или несколькими клиентами-клиентами. Именованные каналы могут использоваться для межпроцессного обмена локально или по сети. несколько объектов NamedPipeClientStream. Любой процесс может действовать как именованный канал или клиент канала, или и то, и другое. " Ссылка: http: //msdn.microsoft.com/en-us/library/system.io.pipes.namedpipeclientstream.aspx – DaeMoohn

+0

@DaeMoohn: Я тоже это читал, и я вернулся к обновлению, когда увидел ваш комментарий. Благодаря! –

+0

Только WCF, называемые трубами, не могут пересекать границу машины. – DaeMoohn

Смежные вопросы