我正在尝试在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方法时,它可以工作......
任何想法是什么错误?
由于
答案 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服务的更多信息。