4

当我使用 WSDL 类型提供程序为Confluence SOAP 服务创建客户端时,我会得到所有带有 (unit -> unit) 签名的方法。

#r "System.ServiceModel.dll"
#r "FSharp.Data.TypeProviders.dll"
open System.ServiceModel
open Microsoft.FSharp.Data.TypeProviders

[<Literal>]
let ConfluenceServiceWsdl = "https://developer.atlassian.com/rpc/soap-axis/confluenceservice-v2?WSDL"
type ConfluenceService = Microsoft.FSharp.Data.TypeProviders.WsdlService<ConfluenceServiceWsdl>

let service = ConfluenceService.``Getconfluenceservice-v2``()

service.getPages;;
...
val it : (unit -> unit) = <fun:it@3-1>

但它应该类似于 Vector<PageSummary> getPages(String token, String spaceKey)- (来自Remote Confluence Methods文档)

我究竟做错了什么?如何打造全功能服务客户端?WSDL 有问题吗?

PS Confluence SOAP WSDL 由Apache Axis生成。

4

1 回答 1

3

看起来像这个问题。作为一种解决方法(一个肮脏的),您可以执行以下操作:

  1. 指定 LocalSchemaFile=.wsdlschema 和 ForceUpdate=false
  2. 打开.wsdlschema,修复故障对应的消息并添加对应的元素

作为示例:

<wsdl:message name="VersionMismatchException">
    <wsdl:part name="fault" type="tns1:VersionMismatchException"/>
</wsdl:message>

会变成

<wsdl:message name="VersionMismatchException">
    <wsdl:part name="fault" element="tns1:VersionMismatchException"/>
</wsdl:message>

还有这个

<complexType name="AlreadyExistsException">
    <complexContent>
        <extension base="tns1:RemoteException">
             <sequence/>
        </extension>
    </complexContent>
</complexType>

将改为

<complexType name="AlreadyExistsException">
    <complexContent mixed="false">
        <extension base="tns1:RemoteException">
            <sequence />
         </extension>
     </complexContent>
</complexType>
<element name="AlreadyExistsException" type="tns1:AlreadyExistsException"/>
于 2013-01-15T23:25:10.903 回答