2009-08-28 89 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