2009-11-03 78 views

回答

4

肥皂水支持WSDL with multiple services or multiple ports(或两者),而不必在你使用,我只是猜测这是你在找什么工作什么的任何详细信息。如果你提供了更多的细节,比如你的Client实例,这个问题会更容易回答。

成功构建Client后,您可以通过print查看可用的服务,方法,端口和类型。

以下示例直接来自泡沫文档。从泡沫现场

实施例:

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() 

这是你正在使用的那种东西吗?如果是这样,请访问他们的文档,我认为您会发现这些文档绰绰有余。如果没有,请考虑为您的问题添加尽可能多的细节,以便我们提供更多的帮助!

+2

实际上,我所要求的是如何在运行时修改端点(端口)地址。你的回答提醒我这个配置可以在服务描述中。它实际上在那里。 client.service ['BLZService']。setlocation() – 2010-01-21 11:50:01

+0

太棒了,我很开心能够帮助你。恭喜! :) – jathanism 2010-01-21 15:26:08

+4

使用泡沫0.4这是client.wsdl.services [0] .setlocation(new_url) – 2012-09-25 00:00:11

1

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

+0

但我将WSDL URL传递给客户端构造函数。如果WSDL和服务具有不同的URL会怎么样? – 2009-11-04 20:01:57

+0

WSDL应该包含服务URL的所有细节。您只需要每个wsdl一个客户端对象,并且您不需要担心服务url(作为客户端) – robince 2009-11-04 20:29:49

2

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

1)client.set_options(位置= 'http://path/to/your/wsdl')使用客户端的clone()方法 - 或 - 2)。然后再次使用set_options()。它和上面的#1一样,但最终有两个客户使用,而不是一个。

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

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

-Matt