Пересылка ошибок сеанса канала RoutingService - PullRequest
0 голосов
/ 08 марта 2012

У меня есть следующая схема обслуживания:

  • RoutingService как IDuplexSessionRouter, самодостаточный, общедоступный через net.tcp, настроенный для пересылки запросов в root / IService1 в службу A, / IService2 в службу B и т. Д.
    • Служба A, как IService1, дуплексная, самостоятельная, с сеансами, по net.pipe со случайным путем
    • Служба B в качестве IService2, дуплексная, самостоятельная, с сеансами, по net.pipe со случайным путем
    • ...
    • Сервис *, ..

Я делаю это потому, что не хочу иметь порт для каждой из служб и не хочу использовать общий доступ к портам.

Проблема, с которой я столкнулся, заключается в том, что когда я размещаю Service A в ServiceHost с привязкой net.tcp, использую фабрику каналов, чтобы открыть канал и начать сеанс, вызвав метод, а затем закрыть или прекратить ServiceHost, я может наблюдать событие Failed или Closed на интерфейсе ICommunicationObject клиентского канала. Когда служба находится за RoutingService, я получаю сбойное событие только после вызова метода в службе. В противном случае клиент все еще думает, что он подключен.

Так что мне интересно, можно ли как-то убедить RoutingService закрыть сеанс клиента, когда основной канал неисправен? Единственный способ добиться этого - постоянно вызывать операцию пульса в службе, стоящей за RoutingService.

...