Самостоятельно размещенный WCF ServiceHost/WebServiceHost Concurrency/Peformance Design Options (.NET 3.5)

Поэтому я буду предоставлять несколько функций через собственный (в WindowsService) WebServiceHost (не знаю, как обрабатывать HTTP GET/POST с помощью ServiceHost), одна из которых может вызываться большую часть времени. Эта функция также будет полагаться на соединение в домене приложения (размещенном службой WindowsService, чтобы оно могло оставаться активным при нескольких запросах).

У меня есть следующие проблемы, и я был бы очень благодарен за любой вклад/мысли/комментарии:

  • Параллельный доступ — как WebServiceHost обрабатывает множество одновременных запросов. Ставятся ли они в очередь и обрабатываются последовательно, или новые экземпляры контрактов создаются автоматически?
  • Связь WebServiceHost -> WindowsService. Мне нужна какая-то форма связи между WebServiceHost и хостингом WindowsService для таких вещей, как запрос нового сеанса, если он не существует. Возможно, реализация класса, который расширяет WebServiceHost событиями, на которые подписывается WindowsService... (если нет другого способа, которым я могу запустить событие в WindowsService при выполнении запроса...)
  • Несколько WebServiceHosts или Contracts. Даст ли какой-либо реальный прирост производительности запуск нескольких экземпляров WebServiceHost в разных потоках (возможно, по одному на конечную точку?)? Лучшее понимание первого пункта, вероятно, поможет здесь.
  • WSDL. Я не знаю, почему (вероятно, мне просто нужно больше читать), но я не уверен, как заставить базовую конечную точку WebServiceHost ответить документом WDSL с описанием доступного контракта. Не требуется, так как все операции будут выполняться через GET-запросы, которые вряд ли изменятся, но было бы неплохо иметь...

На данный момент это все ;) Я много читал о WCF и хотел бы, чтобы я давно этим занимался, но определенно все еще учусь.


person Kyle    schedule 12.05.2010    source источник


Ответы (1)


Параллельный доступ — это то, что вы можете установить с помощью ServiceBehaviorAttribute. существует несколько вариантов: WCF может создавать новый экземпляр класса обслуживания для каждого входящего запроса или один экземпляр может обрабатывать все запросы. Кроме того, вы можете указать WCF, следует ли передавать вам запросы последовательно или одновременно.

WebServiceHost -> связь WindowsService. На ум приходят два подхода: WCF поддерживает режим, называемый «известным экземпляром», когда вы передаете экземпляр службы конструктору ServiceHost вместо того, чтобы передавать Type и позволять WCF создавать его для вас. В этом режиме вы можете предварительно настроить свой экземпляр службы со ссылкой на код вашего хостинга (в качестве альтернативы вы можете использовать события). Альтернативой, если вы хотите сохранить гибкость создания экземпляров, было бы наличие статического метода в вашем коде размещения, который служба WCF могла бы вызывать обратно.

Несколько WebServiceHosts или Contracts - на самом деле нет преимуществ в наличии более одного экземпляра ServiceHost. см. также этот поток SO: преимущества для нескольких servicehosts? Поддерживает ли один ServiceHost несколько одновременных подключений к одной конечной точке?.

WSDL — хотя вы можете включить WSDL, включив публикацию метаданных (http://msdn.microsoft.com/en-us/library/ms788760.aspx), поддержка WSDL предназначена для служб на основе SOAP, а не для чистого HTTP GET/POST. WSDL, автоматически сгенерированный для вашего сервиса, вряд ли будет очень полезен.

person alexdej    schedule 13.05.2010
comment
Большое спасибо, alexdej, особенно за комментарий по связи Host/Service. Хотелось бы, чтобы у меня было больше времени, чтобы возиться с множеством вариантов, доступных при настройке хостов службы wcf. Еще раз спасибо, это очень ценно. - person Kyle; 13.05.2010