Как сделать адрес именованного канала WCF равным адресу WinApi? - PullRequest
3 голосов
/ 24 сентября 2010

Я заметил, что именованный канал WCF

net.pipe://localhost/mynamedpipe

и Windows API

\\.\pipe\mynamedpipe

не конфликтуют.Это почему?Как я могу заставить их указывать на одну и ту же трубу?

Ответы [ 3 ]

4 голосов
/ 27 сентября 2010

Нет задокументированного способа сделать это. После нескольких испытаний я пришел к следующим выводам:

Если у вас есть сервер WCF и клиент Win32 C ++, последний увидит первый адрес как UUID в следующем формате:

12345678-1234-1234-1234-123456789abc

И этот UUID кажется случайным, поскольку он изменяется для одного и того же адреса WCF при каждом запуске сервера.

Я не знаю, будет ли сервер именованных каналов Win32 C ++ с адресом формата GUID виден из клиента WCF, но я уверен, что если это произойдет, сервер должен будет реализовать плохо документированный протокол, используемый WCF.

Документация для такого протокола предоставляется в качестве ответа на мой предыдущий вопрос по этому вопросу.

РЕДАКТИРОВАТЬ Дальнейшие исследования показали, что адрес канала сохраняется в FileMapping. Этот адрес записи, в свою очередь, является хешем, закодированным в base64 нормализованной версии адреса NetNamedPipe.

2 голосов
/ 25 сентября 2010

Соединение нативных и WCF-труб невозможно согласно от Стивена Клири .Это имеет смысл, учитывая контекст пространств имен непересекающихся каналов для WCF и Win32.

Все привязки WCF, начинающиеся с "Net", являются специфичными для .NET.Они используют определенный протокол (недокументированный AFAIK), который может измениться в будущем.

Если вам просто нужно знать имя пипена, вы можете решить это (путем исключения?), Используя pipelist от Sysinternals .Я представляю, что под крышками WCF скрывается родной именованный канал ...

0 голосов
/ 29 ноября 2010

См. здесь , чтобы узнать подробнее об этом, когда я пытался сделать что-то подобное.

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

...