中的Python suds递归错误wsdl.py

2024-09-28 22:19:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在编写一个Python脚本,使用suds包连接到一个新的客户端。我打电话的时候肥皂水客户对于url,我得到一个递归错误:

    RuntimeError: maximum recursion depth exceeded while pickling an object
File "c:\Users\mdriscoll\Documents\projects\test_soap\test_soap.py", line 112, in <module>
  main(sys.argv[1:])
File "c:\Users\mdriscoll\Documents\projects\test_soap\test_soap.py", line 100, in main
  sendSOAPMsg(agency, fax_id, fax_num, setxid)
File "c:\Users\mdriscoll\Documents\projects\test_soap\test_soap.py", line 32, in sendSOAPMsg
  client = Client('https://somerandomclient.com/blahblah.svc?wsdl')
File "c:\Users\mdriscoll\Documents\projects\test_soap\suds\client.py", line 112, in __init__
  self.wsdl = reader.open(url)
File "c:\Users\mdriscoll\Documents\projects\test_soap\suds\reader.py", line 152, in open
  d = self.fn(url, self.options)
File "c:\Users\mdriscoll\Documents\projects\test_soap\suds\wsdl.py", line 157, in __init__
  self.open_imports()
File "c:\Users\mdriscoll\Documents\projects\test_soap\suds\wsdl.py", line 202, in open_imports
  imp.load(self)
File "c:\Users\mdriscoll\Documents\projects\test_soap\suds\wsdl.py", line 314, in load
  d = Definitions(url, options)
File "c:\Users\mdriscoll\Documents\projects\test_soap\suds\wsdl.py", line 136, in __init__
  d = reader.open(url)
File "c:\Users\mdriscoll\Documents\projects\test_soap\suds\reader.py", line 80, in open
  cache.put(id, d)
File "c:\Users\mdriscoll\Documents\projects\test_soap\suds\cache.py", line 336, in put
  bfr = pickle.dumps(object, self.protocol)

一开始,我以为这和Stack前面提到的问题有关:

但这是个问题架构.py. 我试了一下上面提到的补丁,但是它没有效果,而且在补丁中添加的日志永远不会被调用,所以我知道这不是问题所在。在

我在Windows上运行python2.6和suds4.1beta版。注意:回溯中的url已被清除,因为我不允许提及他们的名字。在


Tags: inpytestselfurllineopenusers
2条回答

我是在这个web服务的另一边工作的开发人员。WSDL中确实存在循环引用。我已经修复了这个问题,Mike不再看到递归错误。在

就我而言,该服务是使用WCF在.netframework上构建的。这个问题是由于我试图去掉WSDL中的http://tempuri.org命名空间造成的。我已经将正确的名称空间添加到相应服务类的ServiceContract、DataContract和servicebeavior属性中,但不知道服务器端点元素上的bindingNamespace配置值。这导致visualstudio生成两个相互引用的WSDL文件,一个用于属于正确命名空间的元素,另一个用于位于tempuri.org网站命名空间。在

我发现下面的博客非常有用: http://www.ilovesharepoint.com/2008/07/kill-tempuri-in-wcf-services.html

或者,如果您知道您正在使用.NET WCF服务,您可以只更改.svc?wsdl到.svc?singleWsdl和WCF服务器将为您处理递归。在

相关问题 更多 >