IIS中的WCF双绑定托管

时间:2010-02-12 11:35:16

标签: iis wcf

我正在尝试在IIS中托管一个服务,它有两种方法......其中一种也可以通过一个简单的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

无论如何,当我尝试通过PaymentService.svc调用SOAP方法时,它可以工作......

任何想法是什么错误?

由于

1 个答案:

答案 0 :(得分:3)

好吧,为了使用webHttpBinding,您需要在基于REST的* .svc文件中使用WebServiceHost(请参阅MSDN docs)。

所以你的WEBGETPaymentService.svc应该是这样的:

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

因此,在这种情况下,它将使用WebServiceHost并执行所有必要的魔术,以便在WCF中实现REST。

另请查看MSDN上的WCF REST developer center,了解有关如何托管和使用WCF REST服务的更多信息。