2009-11-03 46 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