Как настроить службу WCF из кода при размещении в IIS? - PullRequest
6 голосов
/ 24 ноября 2010

Моя служба WCF предоставляет доступ к конечной точке https И http. Помимо SSL они идентичны. Они отображаются на один и тот же код.

Конечное намерение заключается в том, чтобы внешние пользователи могли подключаться через https, а внутренние пользователи использовать http.

В разработке это вызывает у меня проблему. Cassini, веб-сервер разработки, упакованный в VS, ненавидит SSL.

Мне интересно, могу ли я настроить службу из кода, поэтому при работе под Cassini я не настроил бы https.

Отсюда возникает вопрос - как настроить службу из кода, если она размещена на IIS? Я был бы очень рад альтернативным ответам о том, как я могу убедить Кассини НЕ жаловаться на https часть конфигурации.

Ответы [ 2 ]

9 голосов
/ 25 января 2012

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

Не слишком близко к истине. Именно в SVC-файле вашего сервиса есть атрибут Factory. Где вы можете указать класс и сборку, где класс находится. Этот класс может быть вашим собственным потомком Web | DataServiceHostFactory Таким образом, ваша разметка svc будет выглядеть так

<%@ ServiceHost 
Language="C#"
 Debug="true" 
 Service="name.space.myService" 
 CodeBehind="name.space.myService.svc.sc" 
 Factory = "name.space.WebServiceHostFactoryEx, assembly.name"
 %>

WebServiceHostFactory будет создаваться для каждого обращения к службе и воссоздает ваш хост так, как вы этого хотите.

Вам также нужно унаследовать WebServiceHost и создать его так, как вам нужно, с определенными конечными точками, поведением, адресами и т. Д. Настройками - как вам угодно.

Здесь очень хороший пост от Микеле Бустаманте здесь

РЕДАКТИРОВАТЬ: я понял, что вышеуказанная ссылка больше не работает, так что здесь это еще одна .

Я использую это в среде IIS для нескольких служб, которые инициализируются одинаково.

3 голосов
/ 24 ноября 2010

Когда вы размещаете хостинг в IIS, вы уделяете много внимания вопросам, связанным с IIS, - в этом случае вы не сможете воспользоваться услугами.

IIS позаботится о том, чтобы ускорить необходимое ServiceHost на основе вашего * .svc-файла - на самом деле, вы не можете ничего с этим поделать.

Мое решение было бы другим - экстернализуйте тег <service> в вашем файле конфигурации (web.config):

<system.serviceModel>
  <services>      
     <service configSource="service.dev.config" />
  </services>
</system.serviceModel>

В вашей среде разработки предоставьте только конечную точку http - так что ваш service.dev.config будет выглядеть примерно так:

<service name=".....">
    <endpoint name="default"
              address="....."
              binding="basicHttpBinding" bindingConfiguration="insecure"
              contract="......" />
</service>

Создайте второй service.prod.config, который будет содержать обе конечные точки - http и https:

<service name=".....">
    <endpoint name="default"
              address="....."
              binding="basicHttpBinding" bindingConfiguration="insecure"
              contract="......" />
    <endpoint name="secure"
              address="....."
              binding="basicHttpBinding" bindingConfiguration="secure"
              contract="......" />
</service>

и укажите это в своем web.config на сервере развертывания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...