У меня есть оба конца двунаправленного соединения 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.
Любые предложения будут оценены на этом этапе.