8

まず、私の質問はこれに似ています

しかし、それは少し違います。私たちが持っているのは、一連の環境であり、同じサービス セットがあります。一部の環境 (ローカル環境) では、wsdl にアクセスできるため、suds クライアントを生成できます。外部環境の場合、wsdl にアクセスできません。しかし、同じで、クライアントを再生成せずに URL だけを変更できることを望んでいました。クライアントのクローンを作成しようとしましたが、うまくいきません。


編集: コードの追加:

    host='http://.../MyService.svc'
    wsdl_file = 'file://..../wsdl/MyService.wsdl'

    client = suds.client.Client(wsdl_file, location=host, cache=None)

    #client = baseclient.clone()

    #client.options.location = otherhost

    client.set_options(port='BasicHttpBinding_IMyService')

    result = client.service.IsHealthy()

それは私にこの例外を与えます:

アクション ' http://tempuri.org/IMyService/IsHealthy 'を持つメッセージは、EndpointDispatcher での ContractFilter の不一致により、受信側で処理できません。これは、コントラクトの不一致 (送信者と受信者の間のアクションの不一致) または送信者と受信者の間のバインディング/セキュリティの不一致が原因である可能性があります。送信者と受信者が同じコントラクトと同じバインド (メッセージ、トランスポート、なしなどのセキュリティ要件を含む) を持っていることを確認します。

問題は、クライアントをホストに直接設定すると、正常に動作することです: client = suds.client.Client(host)

ご覧のとおり、クライアントのクローンを作成しようとしましたが、同じ例外があります。私もこれを試しました:

    baseclient = suds.client.Client(host)

    client = baseclient.clone()

    client.options.location = otherhost
    ....

そして同じ例外を得ました。

誰でも私を助けることができますか?

4

3 に答える 3

6
client.sd[0].service.setlocation(new_url)

...「手動」の方法です。サービスの説明ごと

client.set_option(new_url)

...著者によると、...も機能するはずです。

options ラップ/保護された属性です-- 直接の編集は無視される可能性があります。

于 2013-02-13T20:53:06.633 に答える
3

私はそれを持っている!。どうやってそれを理解したのかさえわかりませんが、少しの推測と運のおかげで、次のようになりました。

    wsdl_file = 'file://...../MyService.wsdl'

    client = suds.client.Client(wsdl_file)
    client.wsdl.url = host #this line did the trick

    client.set_options(port='BasicHttpBinding_IMyService')

    result = client.service.IsHealthy()

そしてそれはうまくいきます!そのプロパティ (client.wsdl.url) に関するドキュメントは見つかりませんが、機能するので、誰かが同じ問題を抱えている場合に備えて投稿します。

于 2010-05-17T20:46:01.833 に答える
0

サービスの を指定することで、それを行うことができる場合がlocationあります。Clientというオブジェクトがあると仮定するとclient、 の URL を更新することでサービスの場所を変更できますclient.options.location

さらに、URL のスキームをurl使用してクライアントを構築するときに、WSDL ファイルのローカル コピーを として使用できます。したがって、これは別のオプションになる可能性があります。もちろん、WSDL 内のデフォルトの場所がオーバーライドされるように も指定する必要があります。file://file:///path/to/service.wsdllocation

于 2010-05-14T19:25:08.877 に答える