2009-08-28 54 views
2

我有這樣的webservicedefinition:WCF WebInvoke問題越來越WSDL

[OperationContract] 
    [FaultContract(typeof(Exception))] 
    [WebInvoke(ResponseFormat = WebMessageFormat.Xml, 
      BodyStyle = WebMessageBodyStyle.Wrapped, 
      RequestFormat = WebMessageFormat.Xml)] 
    SearchResponse SearchXML(SearchRequest req); 

和服務的配置是這樣的:

<service name="SearchEngine.SearchService" behaviorConfiguration="HTTPGetBehavior"> 
    <endpoint address="SearchEngine.SearchService" behaviorConfiguration="ajaxBehavior" binding="webHttpBinding" contract="SearchEngine.ISearchInterface" /> 
    <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" /> 
    <host> 
     <baseAddresses> 
     <add baseAddress="http://localhost:8800/SearchService" /> 
     </baseAddresses> 
    </host> 
    </service> 

,我想獲得的WSDL文件,這應該是可能的像這樣的HTTP-GET請求:

http://localhost:8800/SearchService?wsdl 

但是,所有iam獲得的是「wcf服務的方法不允許的消息」

我在做什麼錯了?我希望WSDL信息顯示的請求和響應外部客戶端結構(這樣他可以準備自己的函數調用)

感謝

+0

看看我的新ANSW呃 - 它解決了你的問題嗎? WebHttpBinding(REST)沒有WSDL - 只有在執行SOAP調用時纔可用 – 2009-08-30 08:48:41

回答

2

好吧,如果我讀正確的綁定,您使用的「webHttpBinding」是一個REST接口。

REST確實不是有什麼像WSDL文件 - 這是一個SOAP的東西。

REST被認爲是更容易使用和更容易理解 - 但它不具有典型的SOAP Web服務將元數據量。

所以基本上,如果你堅持使用REST(的WebHttpBinding),你不能有一個WSDL - 你必須找到另一種方式來傳達暴露你的服務的方法和他們所期望的可能的參數。

似乎正在努力想出一些類似於REST的WSDL,稱爲Web Application Description Language (WADL),但我不知道這種努力已經到了多遠,並且據我所知,WCF REST入門工具包不會現在還不支持任何一種。

檢查了一些鏈接,WADL:

馬克

+0

是的,我已經這麼做了,所以它只是在上面的代碼中缺少......任何其他想法? – David 2009-08-29 08:46:24