Самостоятельно размещенный WCF ServiceHost / WebServiceHost Параллелизм / Опции дизайна Peformance (.NET 3.5) - PullRequest
4 голосов
/ 13 мая 2010

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

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

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

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

1 Ответ

5 голосов
/ 13 мая 2010

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

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

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

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

...