2011-08-02 152 views
3

我想從瀏覽器測試我的休息Wcf服務。 當我試圖從瀏覽器發送一些值我收到以下錯誤。 「 」由於EndpointDispatcher中的AddressFilter不匹配,無法在接收方處理消息 。
檢查發送方和接收方的EndpointAddresses是否同意。休息Wcf服務

然後我添加了[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]。 然後我得到一個不同的錯誤。

「由於在EndpointDispatcher一個ContractFilter失配。 這可能是因爲無論是合同不匹配 或 的發送者和接收者之間的綁定/安全不匹配(發送者和接收者之間不匹配的操作)。
檢查的發送方和接收方具有相同的合同和相同的綁定(包括安全要求,例如消息,傳輸,無)。「

我們可以通過瀏覽器將值傳遞給Rest Wcf服務嗎?

我想從瀏覽器傳遞下列值。

http://mywebsite/Service1.svc/mymethod/Firstname,Lastname,LosAngles,CA 

這裏是我的web.confg文件

<system.serviceModel> 
    <services>    
     <service behaviorConfiguration="Wcfservice1.ServiceBehavior" name="="Wcfservice1.Service1"> 
     <endpoint address="" binding="webHttpBinding" contract="Wcfservice1.IService1"> 
      <identity> 
      <dns value="localhost" /> 
      </identity> 
     </endpoint> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     </service> 
    </services>  
    <behaviors> 
     <serviceBehaviors>   
     <behavior name="Wcfservice1.ServiceBehavior"> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="false" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors>  
    </system.serviceModel> 
+1

我找不到在你的配置了''終結點​​行爲。除非你在'Service1.svc'文件中指定了「WebServiceHostFactory」,否則這個文件會丟失,甚至可能會導致你得到的錯誤。 – mthierba

+0

真的。我在哪裏添加標記。無論web.config中的代碼是由VS2008生成的。我是wcf的新手。請給我提供一些代碼。謝謝你的幫助。 – Henry

+0

。您需要從您的端點鏈接到該行爲: carlosfigueira

回答

8

看起來你沒有啓用對REST端點<webHttp/>行爲。在你的配置文件中的<behaviors/>元素中添加此:

<endpointBehaviors> 
    <behavior name="REST"> 
     <webHttp /> 
    </behavior> 
    </endpointBehaviors> 

然後,更改<endpoint/>元素是這樣的:

<endpoint address="" binding="webHttpBinding" behaviorConfiguration="REST" contract="Wcfservice1.IService1"> 
+0

嗨,感謝您的幫助。這似乎與錯誤的問題是固定的。但現在我正在顯示「方法不允許」對話框。但是,我的方法是僅向POST發送數據到wcf,而wcf將數據保存到數據庫。爲什麼我得到這個錯誤。 – Henry

+0

您是否在服務操作中放置了[WebInvoke]屬性?在這裏查看有關編寫WCF 3.5 REST服務的介紹(您正在使用VS 2008,對吧?):http://msdn.microsoft.com/en-us/library/bb412178%28v=VS.90%29.aspx – mthierba

+0

是的,我做到了。這裏是我的Post方法:[OperationContract] [WebInvoke(UriTemplate =「/ SaveData/{param1},{param2},{param3}」,Method =「POST」)] string SaveData(string param1,string param2,string參數3); – Henry