2008-09-26 56 views
6

什么是我需要在web.config中使WCF与REST协同工作的最低限度?我用[WebGet]注释了我的方法,但他们没有收到消息。RESTful WCF的最低配置

回答

6

我发现,你可以添加以下ServiceHost的指令在* .svc文件,它会自动设置的WebHttpBinding和WebHttpBehavior你:

Factory="System.ServiceModel.Activation.WebServiceHostFactory" 

请注意,命名空间与网络上其他地方提到的有点不同(例如在this MSDN article中)。

这样做后,我能够从web.config中删除整个部分,一切仍然有效!

2

确保您在端点上使用webHttpBinding(而不是httpBinding或wsHttpBinding)。这里是我的端点配置。

<endpoint address="" binding="webHttpBinding" bindingConfiguration="" 
     contract="WcfCore.ICustomer"> 
     <identity> 
     <dns value="localhost" /> 
     </identity> 
    </endpoint> 
+0

我试过了,但收到错误消息:“... EndpointDispatcher中的AddressFilter不匹配。”事实证明,您还需要将WebHttpBehavior添加到您的行为中,但我不知道如何在web.config中执行此操作。 – kgriffs 2008-09-26 14:57:54

+0

<行为名称= “restBehavior”> GWTF 2011-06-14 17:44:41

1

你需要确保你有一个地址为您服务主机如

<services> 
     <service name="SomeLib.SomeService"> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:8080/somebase"/> 
      </baseAddresses> 
     </host> 
<!-- And one EndPoint **basicHttpBinding** WILL WORK !!! --> 

     <endpoint 
        address="basic" 
        binding="basicHttpBinding" 
        contract="SomeLib.SomeContract"/> 
</service> 
</services> 

所以,现在,如果你是自通过一个控制台应用程序托管eg..you可以通过调用主机:

WebChannelFactory<IServiceContract> factory = 
     new WebChannelFactory<IServiceContract>(
      new Uri("http://localhost:8080/somebase")); 

当控制台应用程序启动时,即使它自己托管,地址仍可浏览,并且您应该能够根据您的webget uri模板调用您的操作。

这个最小配置将让你通过selfhosting调用WCF RestFULLY。如果你在IIS中托管,它将以相同的方式工作,除了svc文件替换我们的自定义主机。