2

我有一个这样的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

但我得到的只是“wcf 服务不允许的方法消息”

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

谢谢

4

1 回答 1

3

好吧,如果我正确阅读了绑定,那么您使用的是“webHttpBinding”,它是一个 REST 接口。

REST 没有任何类似于 WSDL 文件的东西——这是 SOAP 的东西。

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

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

似乎正在努力提出类似于用于 REST 的 WSDL 的东西,称为Web 应用程序描述语言 (WADL),但我不知道这种努力已经走了多远,据我所知,WCF REST starter套件尚不支持任何这些。

查看 WADL 的一些链接:

马克

于 2009-08-28T18:33:20.580 回答