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