Рабочий поток службы WCF связывается с потоком ServiceHost - PullRequest
2 голосов
/ 17 марта 2010

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

Ответы [ 2 ]

1 голос
/ 16 мая 2011

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

private static MyService m_ServiceInstance;

public static MyService ServiceInstance
{
    get { return m_ServiceInstance; }
}
0 голосов
/ 17 мая 2011

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

Это имеет пару преимуществ:

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