Хостинг с двойной привязкой WCF в IIS

я пытаюсь разместить службу в IIS, которая имеет 2 метода... 1 из них также можно получить с помощью простого запроса HTTP-GET...

Это моя конфигурация:

  <service name="Svc.PaymentService" behaviorConfiguration="DefaultBehavior">
    <endpoint address="PaymentService.svc/"
              bindingName="Http"
              binding="basicHttpBinding"
              bindingConfiguration="httpBinding"
              contract="Svc.IPaymentService" />
    <endpoint address="WEBGETPaymentService.svc/"
              behaviorConfiguration="EndpointWebGetBehavior"
              binding="webHttpBinding" 
              contract="Svc.IPaymentService" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost/MyService/" />
      </baseAddresses>
    </host>
  </service>

содержимое файлов SVC - это просто перенаправление на мои классы

<%@ ServiceHost Service="Svc.PaymentService"  %>
<%@ Assembly Name="MyService" %>

и интерфейс выглядит так:

    [OperationContract]
    string SOAPMethod(
        string test);

    [OperationContract]
    [WebGet(UriTemplate = "asdf?test={test}")]
    string RESTfulMethod(
        string test);

Когда я пытаюсь разместить службу в IIS и вызвать ее через запрос HTTP-GET, я всегда получаю 404...

http://localhost/MyService/WEBGETPaymentService.svc/RESTfulMethod/asdf?test=hello

В любом случае, когда я пытаюсь вызвать метод SOAP через PaymentService.svc, он работает...

Есть идеи, в чем ошибка?

Спасибо


person David    schedule 12.02.2010    source источник


Ответы (1)


Ну, чтобы использовать webHttpBinding, вам нужно использовать WebServiceHost (см. документы MSDN) в файле *.svc на основе REST.

Итак, ваш WEBGETPaymentService.svc должен выглядеть так:

<%@ ServiceHost Language="C#" Debug="True" 
    Service="Svc.PaymentService"
    Factory="System.ServiceModel.Activation.WebServiceHostFactory"  %>

поэтому в этом случае он будет использовать WebServiceHost и делать всю необходимую магию, чтобы сделать REST возможным в WCF.

Также посетите Центр разработчиков WCF REST на сайте MSDN, чтобы получить дополнительные сведения о размещении и использовании WCF. REST-сервисы.

person marc_s    schedule 12.02.2010
comment
хм, это не решило мою проблему... теперь я получаю конечную точку No eservice, но я совершенно уверен, что определение правильное... - person David; 15.02.2010
comment
какой URL вы используете? Судя по вашей конфигурации, это должно быть что-то вроде http://localhost/MyService/WEBGETPaymentService.svc/asdf?test=abc — возможно, вам не хватает части этого URL? - person marc_s; 15.02.2010