Как сказал marc_s, вы создаете службу PerCall / PerSession WCF, и новый экземпляр создается при каждом запросе / первом запросе каждого сеанса.
Вы можете построить несколько сантехнических операций вокруг него, чтобы экземпляр мог уведомлять хост службы о получении нового запроса, но это не будет легким упражнением, и вам следует помнить о возможности утечки памяти, есливы решаете использовать события, чтобы сделать это - без реализации Слабого шаблона событий ваши экземпляры службы WCF могут остаться без движения, так как обработчики событий по-прежнему хранят ссылку на них, ЕСЛИ вы не забыли уведомить хост, чтобы отписаться, когда экземпляры службы WCF
Вместо этого, вот две идеи, которые могут помочь вам в достижении вашей цели:
Используйте Single InstanceContextMode , если вашСлужба может быть сделана одиночной, и в этом случае вы создадите новый экземпляр, который реализует ваш контракт на обслуживание, и разместите его:
// instance will be your WCF service instance
private ServiceHost _host = new ServiceHost(instance);
, чтобы у вас был доступ к экземпляру, который будет извлекать клиентские запросы.
Кроме того, вы можете иметь все размещенные инстЭто могут быть фиктивные «фасады», которые разделяют статический класс, который на самом деле обрабатывает запросы:
[ServiceContract]
interface IMyService { ... }
interface IMyServiceFascade : IMyService { ... }
// dummy fascade
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall]
public class MyServiceFascade : IMyServiceFascade
{
private static IMyService _serviceInstance = new MyService();
public static IMyService ServiceInstance { get { return _serviceInstance; } }
public int MyMethod()
{
return _serviceInstance.MyMethod();
}
...
}
// the logic class that does the work
public class MyService : IMyService { ... }
// then host the fascade
var host = new ServiceHost(typeof(MyServiceFascade));
// but you can still access the actual service class
var serviceInstance = MyServiceFascade.ServiceInstance;
Я бы сказал, что вам следует использовать первый подход, если это возможно, делает жизнь немного проще!