Время жизни экземпляра WebServiceHostFactory и WebServiceHost - PullRequest
1 голос
/ 13 октября 2011

Я пытаюсь выяснить время жизни WebServiceHost. Я думал, что первоначально это будет для каждого вызова / запроса (то есть аналогично странице ASP.Net, создаваемой для каждого запроса). Я создал пользовательские WebServiceHostFactory и WebServiceHost, но заметил, что Factory и Host создаются только один раз.

CustomWebServiceHostFactory переопределяет CreateServiceHost, а CustomWebServiceHost переопределяет OnOpening, чтобы выдавать некоторую диагностику для отслеживания времени жизни.

Мой сервисный файл

[ServiceContract]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public partial class ProductService
{
 ... // code
}

My Global.asax File

private void RegisterRoutes()
{
    RouteTable.Routes.Add(new ServiceRoute("products", new CustomServiceHostFactory(), typeof(ProductService)));
}

Кто-нибудь может объяснить, почему два запроса попадают в один и тот же экземпляр CustomWebServiceHost, и как мне создать новый хост для каждого запроса на обслуживание?

Спасибо

1 Ответ

0 голосов
/ 13 октября 2011

Создание хоста для каждого нового запроса не имеет смысла - хост сервиса - это среда выполнения WCF на стороне сервера - фрагмент кода, который будет

  • прослушивание входящих запросов
  • отправляет эти запросы классам обслуживания, которые будут обработаны

Создание хоста службы - довольно дорогая и обширная операция - в случае хостинга в IIS это будет сделано «по требованию», когда поступит первый запрос, но хост службы останется без изменений в течение определенного времени и быть повторно использованы.

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

То, что будет создаваться для каждого запроса для каждого запроса, - это экземпляр класса обслуживания , который фактически обрабатывает поступающий запрос (но не хост службы ).

...