2012-09-10 68 views
0

開放空閒和進口皁液客戶多泡客戶,我可以通過創建一個客戶端:創建指向同一個WSDL

c = Client('http://blah/Core.svc?wsdl') 

隨後致電:

c2 = Client('http://blah/Core.svc?wsdl') 

會得到我TypeNotFound錯誤被拋出,在wsdl文件中命名一個類。

我曾嘗試:

timeout = 5 # and then waiting 
cache = None 

但發生同樣的錯誤。我不介意如果我不能使用第一個實例,但我如何獲得第二個實例?

我寫的測試,這將是PySys的單個實例中運行,但個別不共享數據。

順便說一句,當我退出後,這個()IDLE,它問我要殺死正在運行的進程,所以我是糾正假設創建客戶機打完一個線程?

我得到的錯誤是:

Traceback (most recent call last): 
    File "<pyshell#9>", line 1, in <module> 
    c1 = Client('http://localhost:8090/Service/Core.svc?wsdl') 
    File "build\bdist.win-amd64\egg\suds\client.py", line 119, in __init__ 
    sd = ServiceDefinition(self.wsdl, s) 
    File "build\bdist.win-amd64\egg\suds\servicedefinition.py", line 58, in __init__ 
    self.paramtypes() 
    File "build\bdist.win-amd64\egg\suds\servicedefinition.py", line 137, in paramtypes 
    item = (pd[1], pd[1].resolve()) 
    File "build\bdist.win-amd64\egg\suds\xsd\sxbasic.py", line 63, in resolve 
    raise TypeNotFound(qref) 
TypeNotFound: Type not found: '(ClassName, http://schemas.datacontract.org/4004/07/Class.Namespace,)' 

c.last_received()和c.last_sent()都是空的。

進一步說,我看了看日誌我的IIS,發現,每當我打電話,第一次客戶端(URL)在Python情況下,我得到:從內部

GET /Service/Core.svc wsdl 8090 - ::1 Python-urllib/2.6 
GET /Service/Core.svc xsd=xsd0 8090 - ::1 Python-urllib/2.6 
GET /Service/Core.svc xsd=xsd2 8090 - ::1 Python-urllib/2.6 
GET /Service/Core.svc xsd=xsd1 8090 - ::1 Python-urllib/2.6 
GET /Service/Core.svc xsd=xsd3 8090 - ::1 Python-urllib/2.6 
GET /Service/Core.svc xsd=xsd2 8090 - ::1 Python-urllib/2.6 
GET /Service/Core.svc xsd=xsd1 8090 - ::1 Python-urllib/2.6 
GET /Service/Core.svc xsd=xsd3 8090 - ::1 Python-urllib/2.6 
GET /Service/Core.svc xsd=xsd2 8090 - ::1 Python-urllib/2.6 
GET /Service/Core.svc xsd=xsd1 8090 - ::1 Python-urllib/2.6 
GET /Service/Core.svc xsd=xsd3 8090 - ::1 Python-urllib/2.6 
GET /Service/Core.svc xsd=xsd2 8090 - ::1 Python-urllib/2.6 
GET /Service/Core.svc xsd=xsd3 8090 - ::1 Python-urllib/2.6 
GET /Service/Core.svc xsd=xsd1 8090 - ::1 Python-urllib/2.6 
GET /Service/Core.svc xsd=xsd2 8090 - ::1 Python-urllib/2.6 
GET /Service/Core.svc xsd=xsd3 8090 - ::1 Python-urllib/2.6 

但後續調用相同的python實例給我:

GET /Service/Core.svc wsdl 8090 - ::1 Python-urllib/2.6 
GET /Service/Core.svc xsd=xsd0 8090 - ::1 Python-urllib/2.6 
GET /Service/Core.svc xsd=xsd2 8090 - ::1 Python-urllib/2.6 
GET /Service/Core.svc xsd=xsd3 8090 - ::1 Python-urllib/2.6 
GET /Service/Core.svc xsd=xsd1 8090 - ::1 Python-urllib/2.6 
GET /Service/Core.svc xsd=xsd2 8090 - ::1 Python-urllib/2.6 
GET /Service/Core.svc xsd=xsd3 8090 - ::1 Python-urllib/2.6 

每次請求某個文件時,響應的大小是相同的。

+0

此錯誤肯定意味着您的服務的第二次調用不會返回相同的wsdl。 –

+0

如果我得到一個客戶端,重新啓動IDLE shell並再次獲取客戶端,一切都很好。這個問題只發生在同一個shell中兩次調用時。 – Peter

回答

1

這可能是一個問題的其他地方(即與服務提供的WSDL),爲我不能再現無論是在IDLE或Python命令殼或腳本使用SOAP服務時(我使用Windows)。

你能提供確切的錯誤,皁液的版本,實際的URL有問題的WSDL?

下面的輸出是一樣的,不管我如何努力。

>>> from suds.client import Client 
>>> c1 = Client('http://vocab.nerc.ac.uk/vocab2.wsdl') 
>>> c2 = Client('http://vocab.nerc.ac.uk/vocab2.wsdl') 
>>> c1 
<suds.client.Client object at 0x022AE230> 
>>> c2 
<suds.client.Client object at 0x022CCDB0> 
>>> 

編輯:

關於對戒菸,即使你已經運行在IDLE沒有代碼,然後鍵入quit()關閉

EDIT 2時發生IDLE通知:

嘗試通過使用一些技術調試此提到here(二者last_sent和記錄)

+0

我很難跟蹤wsdl文件的問題。有沒有辦法從第一個創建的客戶端中清除所有的持久性? – Peter

+0

我不是%100肯定,但我認爲在創建客戶端時應用'c1 = Client('wsdl_url',cache = None)時,唯一的緩存會停止 –

0

此錯誤不會在蘇出現ds默認。 此出現之後申請this patch如下:

recurselevel-schema.py.patch https://github.com/sandersnewmedia/suds/blob/master/suds/xsd/recurselevel-schema.py.patch

文件 /suds/xsd/schema.py

這個補丁在

解決「遞歸層次架構的錯誤」,但原因錯誤時,你需要用多個泡沫客戶指向工作到同一個wsdl。

相關問題