2

使用 SUDS SOAP 客户端如何指定 Web 服务 URL。我可以清楚地看到客户端构造函数中指定了 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

您可以通过两种方法将客户端指向不同的端点:

1) client.set_options(location=' http://path/to/your/wsdl ') -或- 2) 使用客户端的 clone() 方法。然后再次使用 set_options() 。它实际上与上面的#1 相同,但您最终会使用两个客户端,而不是一个。

后一种方法是创建客户端对象的轻量级克隆的一种干净的方法——它们将共享已解析的 wsdl,并且只会在您通过 set_options() 设置的选项上有所不同。

我使用这两种方法,它们都工作得很好。

-马特

于 2010-01-23T13:36:25.587 回答
1

我认为您必须为每个不同的 URL 创建一个新的 Client 对象。

于 2009-11-03T23:15:32.910 回答