2008-09-26 58 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文件替換我們的自定義主機。