#wcf #wcf-rest
#wcf #wcf-rest
Вопрос:
Я пытаюсь определить время жизни WebServiceHost. Я думал, что изначально это будет для каждого вызова / для каждого запроса (т. Е. Аналогично ASP.Net страница, создаваемая для каждого запроса). Я создал пользовательские WebServiceHostFactory и WebServiceHost, но заметил, что фабрика и хост создаются только один раз.
CustomWebServiceHostFactory переопределяет CreateServiceHost, а CustomWebServiceHost переопределяет OnOpening, чтобы выполнить некоторую диагностику для отслеживания времени жизни.
Мой служебный файл
[ServiceContract]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public partial class ProductService
{
... // code
}
Мой глобальный файл.asax
private void RegisterRoutes()
{
RouteTable.Routes.Add(new ServiceRoute("products", new CustomServiceHostFactory(), typeof(ProductService)));
}
Кто-нибудь может объяснить, почему два запроса попадают в один и тот же экземпляр CustomWebServiceHost и как я буду создавать новый хост для каждого запроса на обслуживание?
Спасибо
Ответ №1:
Создание хоста для каждого нового запроса не имеет смысла — хост службы — это среда выполнения WCF на стороне сервера — фрагмент кода, который будет
- прослушивание входящих запросов
- отправка этих запросов классам служб, которые будут обработаны
Создание узла службы — довольно дорогостоящая и трудоемкая операция — в случае размещения в IIS это будет сделано «по требованию» при поступлении первого запроса, но узел службы останется в течение определенного времени и будет использоваться повторно.
При самостоятельном размещении вы обычно создаете один экземпляр узла службы в своем управляемом приложении, а затем оставляете этот узел открытым и активным до тех пор, пока не захотите закрыть свои службы.
Для каждого запроса будет создан экземпляр класса обслуживания, который фактически обрабатывает поступающий запрос (но не хост службы).