2013-06-10 4 views
0

У меня есть некоторые вопросы о том, как сделать мой сервис WCF надежным.Как сделать работу WCF надежной?

Установка Мои услуги содержат 3 службы WCF, 2 - обычный веб-сервис через HTTP, а другой - протокол TCP с использованием Protobuf. Служба TCP настроена по-разному, чтобы заставить ее работать как можно лучше с кликентом Winform.

Затем он размещается в службе Windows.

Проект WCF содержит CustomHostServiceFactory, где ApplyConfiguration используется для загрузки всех всех данных кеша (все службы используют тот же BLL, где находится кеш).

protected override void ApplyConfiguration() 
     { 
      base.ApplyConfiguration(); 

      Startup(); 
     } 

The Windows Services содержит следующие при запуске

private ServiceHost StartService(Type serviceType) 
     { 
      ServiceHost serviceHost = null; 

      // Create a ServiceHost for the CalculatorService type and 
      // provide the base address. 
      Console.WriteLine("Creating service " + serviceType.FullName); 
      serviceHost = new ServiceHost(serviceType); 

      serviceHost.Opened += serviceHost_Opened; 
      serviceHost.Closed += serviceHost_Closed; 

      // Open the ServiceHostBase to create listeners and start 
      // listening for messages. 
      Console.WriteLine("Starting service..."); 
      serviceHost.Open(); 
      Console.WriteLine("Service started successfully"); 
      Console.WriteLine("..."); 
      return serviceHost; 

     } 

Этот код, используемый используемый как из Main (ServiceBase) и от OnStart (переопределение) в службе Windows.

Задача Теперь я должен убедиться, что это правильно, почему это нужно настроить? Может ли служба получать вызов во время запуска, но до запуска инициализации кэшей?

+0

Почему бы не зарегистрировать сбойное событие? – ilansch

ответ

0

Теперь я должен убедиться, что это правильно, зачем это устанавливать? Может ли служба получать вызов во время запуска, но до запуска инициализации кэшей?

Просто убедитесь, что код инициализации работает до serviceHost.Open();.

Если клиент вызывает услугу до того, как конечная точка будет доступна, клиент получит исключение соединения. Когда конечная точка открыта, вы можете быть уверены, что код инициализации был вызван до Open() и что ваша служба готова обслуживать запросы.

0

К сожалению, услуга принимает запросы только после вызова .Open(). Вы получите EndpointNotFoundException s, если он еще не открыт.

Кроме того, код запуска для самой службы, то есть public ctor(), не запускается до тех пор, пока не пройдет первый запрос.