2

SUDS SOAP クライアントを使用して Web サービス URL を指定するにはどうすればよいですか。Client コンストラクターで WSDL パスが指定されていることがはっきりとわかりますが、Web サービスの URL を変更したくない場合はどうすればよいでしょうか?

4

3 に答える 3

4

Sudsは複数のサービスまたは複数のポート(あるいはその両方)でWSDLをサポートしており、作業内容に関する詳細な情報がなくても、これがあなたが探しているものだと推測しています。Clientインスタンスがどのように見えるかなど、より詳細な情報を提供すると、この質問に答えやすくなります。

を正常に構築しClientたらprint、利用可能なサービス、メソッド、ポート、およびタイプを確認できます。

次の例は、sudsのドキュメントから直接引用したものです。

sudsサイトからの例:

from suds.client import Client
url = 'http://www.thomas-bayer.com/axis2/services/BLZService?wsdl'
client = Client(url) 
print client

これを出力します:

Suds - version: 0.3.7 build: (beta) R550-20090820

Service (BLZService) tns="http://thomas-bayer.com/blz/"
   Prefixes (1)
     ns0 = "http://thomas-bayer.com/blz/"
   Ports (2):
     (soap)
       Methods (1):
         getBank(xs:string blz, )
     (soap12)
       Methods (1):
         getBank(xs:string blz, )
   Types (5):
      getBankType
      getBankResponseType
      getBankType
      getBankResponseType
      detailsType

Service (OtherBLZService) tns="http://thomas-bayer.com/blz/"
   Prefixes (1)
     ns0 = "http://thomas-bayer.com/blz/"
   Ports (2):
     (soap)
       Methods (1):
         getBank(xs:string blz, )
     (soap12)
       Methods (1):
         getBank(xs:string blz, )
   Types (5):
      getBankType
      getBankResponseType
      getBankType
      getBankResponseType
      detailsType

各サービスにはさまざまな方法でアクセスできますが、ここでは、メソッドによって修飾された各サービスとは異なるポートを示します。

## service: BLZService, port: soap12, method: getBank
client.service['BLZService']['soap12'].getBank()
## service: OtherBLZService, port: soap, method: getBank
client.service['OtherBLZService']['soap'].getBank()

それはあなたが取り組んでいるようなものですか?もしそうなら、彼らのドキュメントをご覧ください。あなたはそれで十分だと思います。そうでない場合は、質問にできるだけ詳細を追加して、より多くの作業を行えるようにすることを検討してください。

于 2010-01-21T04:10:16.797 に答える
4

次の 2 つの方法で、クライアントを別のエンドポイントに向けることができます。

1) client.set_options(location=' http://path/to/your/wsdl ') または 2) クライアントの clone() メソッドを使用します。次に、set_options() を再度使用します。上記の #1 と同じですが、1 つではなく 2 つのクライアントを使用することになります。

この後者の方法は、クライアント オブジェクトの軽量なクローンを作成するクリーンな方法です。それらは解析された wsdl を共有し、set_options() で設定したオプションのみが異なります。

私は両方の方法を使用していますが、どちらも非常にうまく機能します。

-マット

于 2010-01-23T13:36:25.587 に答える
1

異なる URL ごとに新しい Client オブジェクトを作成する必要があると思います。

于 2009-11-03T23:15:32.910 に答える