Рабочий поток службы WCF взаимодействует с потоком ServiceHost

У меня есть служба Windows NT, которая открывает объект ServiceHost. Контекст хоста службы зависит от сеанса, поэтому для каждого клиента создается новый рабочий поток. Я пытаюсь сделать так, чтобы каждый рабочий поток обращался к потоку, запустившему узел службы. Службе NT необходимо открыть VPN-соединение и запросить информацию с устройства в удаленной сети. Информация хранится в базе данных SQL для чтения рабочими потоками. Я хочу опросить устройство только в том случае, если к нему подключен клиент, что уменьшит сетевой трафик. Я хотел бы, чтобы рабочие потоки сообщили потоку хоста службы, что они запрашивают информацию, и начали опрос и обновление базы данных. Все работает, если устройство постоянно опрашивается и база данных обновляется.


person Brent    schedule 17.03.2010    source источник


Ответы (2)


Почему бы не реализовать синглтон и не инициализировать это свойство после создания службы. После этого вы всегда можете обратиться к нему.

private static MyService m_ServiceInstance;

public static MyService ServiceInstance
{
    get { return m_ServiceInstance; }
}
person Denis Besic    schedule 16.05.2011

Я предлагаю превратить код, открывающий VPN-соединение и запрашивающий информацию, в его собственную одноэлементную службу и размещать ее в той же (или другой) службе Windows NT. Служба, обращенная к клиенту, вызывает службу VPN с помощью WCF. Служба VPN будет опрашивать только тогда, когда клиентские службы "слушают".

У этого есть пара преимуществ:

  • WCF позаботится о сложностях создания экземпляров службы и управления потоками. (В синглтоне вам, вероятно, все равно придется реализовать блокировку, но это все.)
  • Служба опроса VPN больше не тесно связана со службой, обращенной к клиенту. Это дает вам гибкость в развертывании и возможность поддерживать новые варианты использования в будущем.
person ErnieL    schedule 17.05.2011