获取WSDL的WCF WebInvoke问题

时间:2009-08-28 12:12:00

标签: wcf wcf-client

我有一个像这样的webservicedefinition:

    [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-service”的“方法不允许消息”

我做错了什么?我希望WSDL信息显示请求的结构和对外部客户端的响应(以便他可以准备他的函数调用)

由于

1 个答案:

答案 0 :(得分:2)

好吧,如果我正确读取了绑定,那么你正在使用“webHttpBinding”这是一个REST接口。

REST 有类似WSDL文件的东西 - 这是SOAP的东西。

REST被认为更易于使用且更易于理解 - 但它没有典型的SOAP Web服务所具有的元数据量。

所以基本上,如果你坚持使用REST(webHttpBinding),你就不能拥有WSDL - 你必须找到另一种方式来传达你公开的服务方法和他们期望的可能参数。

似乎正在努力想出类似于REST的WSDL,称为Web Application Description Language (WADL),但我不知道这种努力到底有多远,据我所知,WCF REST入门套件目前还不支持。

查看WADL的一些链接:

马克