4

WSDL タイプ プロバイダーを使用してConfluence SOAP サービスのクライアントを作成すると、(ユニット -> ユニット) シグネチャを持つすべてのメソッドが取得されます。

#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)- (リモート コンフルエンス メソッドのドキュメントから)

私は何を間違っていますか?フル機能のサービス クライアントを作成するには? 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 に答える