Подтвердить что ты не робот

Использование WCF для переноса существующего подключенного потока

У меня есть оба конца двунаправленного соединения Stream, с которым я хочу общаться. Основная реализация за потоком не важна, я хочу работать на уровне Stream...

Вместо того, чтобы реализовывать мой собственный протокол связи для потока, я хочу использовать все существующие возможности WCF для переноса существующего потока с помощью двунаправленного (запрос/ответ + обратный вызов) канала связи WCF.

Мой вопрос: как я могу это сделать...?

UPDATE:

Я пошел по пути реализации пользовательского транспорта. У меня это работает, но я до сих пор не доволен этим...

Я применил IDuplexSessionChannel, чтобы обернуть поток вместе с соответствующими IChannelFactory и IChannelListener и элементом Binding для создания фабрик каналов. Теперь я просто передаю подключенный поток и, в конце концов, передаю их в транспортный канал, когда он создан.

Итак, я могу создать клиентский прокси для доступа к службе через поток следующим образом:

var callback = new MyCallback();
var instanceContext = new InstanceContext( callback );
var pipeFactory = new DuplexChannelFactory<IMyService>( instanceContext, new StreamBinding(clientStream),
                                                        new EndpointAddress("stream://localhost/MyService"));
var serviceProxy = pipeFactory.CreateChannel();

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

Вопросы

Поэтому я ищу лучший способ взять IDuplexSessionChannels и перенести их в прокси-канал на обоих серверах и клиентах.

Или, возможно, другая реализация ServiceHost, для которой не требуется IChannelListener.

Действительно, проблема здесь заключается в том, что я не хочу одного сервера, множественного расположения клиентов, у меня есть отношения 1-1 между моей службой WCF и клиентом. Есть ли способ создать один из них?

Иными словами, я хочу создать экземпляр службы Server-side без использования ServiceHost.

Любые предложения будут оценены на этом этапе.

4b9b3361

Ответ 1

Используйте клиента на обоих концах. Однако вам нужно будет четко определить свои контракты. Если у вас есть ClientA и ClientB в обоих концах потока, когда ClientA отправляет запрос, ClientB ожидает, что он будет выглядеть так, как он видит, как он определил контракт обратного вызова и наоборот.