2013-06-18 2 views
0

현재 suds 패키지를 사용하여 새로운 클라이언트에 연결하는 Python 스크립트를 작성하고 있습니다. 내가 URL을 suds.Client를 호출 할 때, 나는 재귀 오류 얻을 :Python suds - wsdl.py에서 재귀 오류가 발생했습니다.

: 처음에는

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) 

을, 나는 그것이 스택에 앞에서 언급 한 문제와 관련 있다고 생각

하지만 suds 'schema.py의 문제입니다. 필자가 언급 한 패치를 시도했지만 효과가 없으며 패치에 추가 된 로깅이 호출되지 않기 때문에 문제가되지 않습니다.

저는 suds 4.1 베타가있는 Windows에서 Python 2.6을 실행하고 있습니다. 참고 : 추적 이름의 언급이 허용되지 않아서 추적 로그의 URL이 삭제되었습니다.

+0

pickle이 덤프하려고하는 객체에 순환 참조가 있습니까? –

+0

내가 아는 것은 아닙니다. 이 문제는 client = suds.client.Client (url)을 호출 할 때 발생하므로 라이브러리 코드 자체에서 발생합니다. 원시 WSDL "코드"도 살펴 보았습니다.하지만 SOAP에 대해 익숙하지 않아서 무엇을 검색해야하는지 알지 못합니다. –

답변

3

저는이 웹 서비스의 반대편에서 일하고있는 개발자입니다. 실제로 WSDL에는 순환 참조가있었습니다. 그 이후로이 문제가 수정되었으며 Mike는 더 이상 재귀 오류를 보지 않습니다.

내 측면에서는 WCF를 사용하는 .NET 프레임 워크에서 서비스가 빌드되고 있습니다. 이 문제는 WSDL에서 http://tempuri.org 네임 스페이스를 제거하려는 시도로 인해 발생했습니다. 적절한 네임 스페이스를 적절한 서비스 클래스의 ServiceContract, DataContract 및 ServiceBehavior 특성에 추가했지만 서버 끝점 요소의 bindingNamespace 구성 값을 알지 못했습니다. 이로 인해 Visual Studio는 서로를 참조하는 두 개의 WSDL 파일을 생성했습니다. 하나는 올바른 네임 스페이스에 속한 요소이고 다른 하나는 tempuri.org 네임 스페이스에있는 바인딩 정보입니다.

나는 다음 블로그 게시물 매우 도움이 될 발견? 또는 http://www.ilovesharepoint.com/2008/07/kill-tempuri-in-wcf-services.html

1

당신은 당신이 당신의 SVC는을 변경할 수 있습니다 당신은 .NET의 WCF 서비스로 작업 알고있는 경우 WSDL을 singleWsdl 및 SVC는 할 수 WCF 서버가 재귀를 처리합니다.

+0

데이빗, 사랑해. – royal

관련 문제