2010-05-12 6 views
4

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

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

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

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

ответ

5

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

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

Несколько WebServiceHosts или контрактов - на самом деле нет преимущества иметь более одного экземпляра ServiceHost. см. также этот поток SO: What are the benefits for several servicehosts? Does one ServiceHost support several simultaneous connections on one endpoint?.

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

+0

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