Именованные трубы от VB6 до WCF - PullRequest
3 голосов
/ 21 сентября 2010

Могу ли я, чтобы приложение VB6 вызывало соединение именованного канала со службой, написанной на C # с конечной точкой WCF?

Проект VB6, использующий именованные каналы для связи со службой, написанной на C ++. Я хотел бы преобразовать службу C ++ в C # (желательно .NET 4.0).

Проект VB6 использует вызов Win32 для CallNamedPipes для отправки сообщения на сервер. Полезная нагрузка сообщения - это строка, которая состоит из следующей структуры.

 [command][data length][data if approprate to the message]

В настоящее время я не могу преобразовать сторону приложения VB6, но мне интересно, могу ли я полагаться на функцию CallNamedPipe для отправки сообщения в новую службу WCF и хорошо ли они будут играть вместе. Я бы увидел, что сторона контракта службы WCF в основном представляет собой один метод, который принимает строку, которую я буду анализировать.

Кроме того, поскольку CallNamedPipes могут получать возвращаемые данные в параметре outputBuffer, сможет ли WCF приспособиться к этому? Будет ли контракт примерно таким ...

string DoSomething(string command)

Спасибо за вашу помощь!

Brian

Ответы [ 3 ]

1 голос
/ 21 сентября 2010

WCF очень хорош, но действительно светит при использовании WCF по обе стороны канала связи. Попытка подключить устаревший код к службе WCF в лучшем случае сложна.

Вероятно, будет проще заставить вашу службу C # использовать NamedPipeServerStream напрямую. Это даст вам полный контроль над тем, как обрабатывается соединение и передача. При этом ничто не мешает вам выполнять оба этих действия (реализовать собственный канал NamedPipeServerStream, а также выставить одну или несколько конечных точек WCF из одной и той же программы). Это также даст возможность двигаться вперед, если вы когда-нибудь захотите обновить клиента.

0 голосов
/ 02 декабря 2010

Почему бы не написать класс ComVisible, заключающий в себе клиентский прокси WCF, который ваш код VB6 мог бы вызывать так же, как любой другой компонент библиотеки COM.

0 голосов
/ 21 сентября 2010

Brian

Не могли бы вы вызвать приложение C ++ по имени Pipes непосредственно из вашего кода C #, используя PInvoke

Pinvoke.net

Затем оберните сервис pinvoke вокруг Сервиса WCF для легкого взаимодействия.

Привет

Иэн

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...