WCF размещает службу в IIS для Silverlight и AJAX - PullRequest
1 голос
/ 03 августа 2009

Я пытаюсь разместить службу WCF в IIS7, которая работает как с Silverlight, так и с запросами GET. У меня работает конечная точка Silverlight, но я не могу понять, как создать дополнительную конечную точку в той же службе, которая будет обрабатывать запросы GET от клиентов AJAX.

У меня есть вторая служба, предназначенная только для запросов GET, и она работает нормально, поэтому мой вопрос не в том, как настроить конечную точку для запросов GET, а в том, как настроить службу, имеющую две конечные точки, одну для запросов Silverlight и один для запросов GET.

Мой IIS web.config имеет:

<system.serviceModel>
  <services>
    <service name="MyAssembly.MyService">
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
      <endpoint address="http://localhost/provisioning.svc" binding="basicHttpBinding" contract="MyAssembly.IMyService" />
      <endpoint address="http://localhost/provisioningajax.svc" binding="webHttpBinding" contract="MyAssembly.IMyService" />
    </service>
  </services>
<system.serviceModel>

В файлах provisioning.svc и provisioningajax.svc содержится одно и то же:

<% @ServiceHost Service="MyAssembly.MyService" %>

Конечная точка provisioning.svc работает с моими клиентами Silverlight нормально, но я не могу заставить работать с provisioningajax.svc. При попытке получить к нему доступ я получаю сообщение об ошибке выполнения и следующее сообщение об ошибке в журнале событий приложений.

Информация об исключении: Тип исключения: InvalidOperationException Сообщение об исключении: ChannelDispatcher в 'http://localhost/provisioning.svc' с контрактом (ами) "MyAssembly.IMyService" "не может открыть свой IChannelListener.

1 Ответ

3 голосов
/ 03 августа 2009

Чтобы использовать webHttpBinding для вашей конечной точки обеспечения Ajax, вам нужно настроить дополнительные биты и кусочки, например, поведение "webHttp", на вашем сервере и использовать WebServiceHostFactory.

Ты это сделал ??

Вам необходимо добавить этот фрагмент в конфигурацию на стороне сервера:

<behaviors>
    <endpointBehaviors>
      <behavior name="webHttp">
        <webHttp/>
      </behavior>
    </endpointBehaviors>
  </behaviors>

и ваш SVC-файл, используемый для обеспечения Ajax, должен быть:

<%@ServiceHost language="c#" Service="MyAssembly.MyService" 
   Factory="System.ServiceModel.WebServiceHostFactory" %>

Обратите внимание на настройку «Factory =» - это ключ. Вам нужно использовать WebServiceHostFactory (не прямой, обычный ServiceHostFactory для другой привязки) для webHttp.

Марк

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