У меня есть оба конца двунаправленного подключенного потока
, который я хочу общение закончено. Базовая реализация потока не важна, я хочу работать на уровне Stream
...
Вместо того, чтобы реализовывать свой собственный протокол связи для потока, я хочу использовать все существующие Готовность WCF обернуть существующий поток двунаправленным (запрос / ответ + обратный вызов) каналом связи WCF.
У меня вопрос, как я могу это сделать ...?
ОБНОВЛЕНИЕ:
Я пошел по пути реализации настраиваемого транспорта.У меня это работает, но я все еще не совсем доволен ...
Я реализовал IDuplexSessionChannel
, чтобы обернуть поток, вместе с соответствующим IChannelFactory
и IChannelListener
и элемент привязки для создания фабрик каналов. Теперь я просто прохожу через подключенный поток и в конечном итоге передаю его в транспортный канал, когда он создается.
Итак, я могу создать клиентский прокси для доступа к службе через поток следующим образом:
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 и клиентом. Есть ли правильный способ создать один из них?
Другими словами, я хочу создать экземпляр службы на стороне сервера без использования ServiceHost.
Любые предложения будут оценены на данном этапе.