2010-07-21 8 views
4

Je passe un appel de services Web à un service Web Microsoft CRM à l'aide de Python/suds/python-ntlm, et mon appel au service est blocage sur une lecture SSL. Le fournisseur de services CRM fournit à la fois un service de test et un service de production, et je peux très bien contacter le service de test (bien qu'il ne dispose pas de données utiles) mais le service principal ne fait que bloquer.La communication SSL Python se bloque lors de la lecture, puis une erreur 54 - connexion réinitialisée par l'homologue

C'est la trace de la pile, après avoir interrompu le processus:

;; This buffer is for notes you don't want to save, and for Lisp evaluation. 
;; If you want to create a file, visit that file with C-x C-f, 
;; then enter the text in that file's own buffer. 

INFO:root:Getting WSDL from file:///Users/crose/projects/aed/2366/crm/services/metadata.wsdl 
DEBUG:suds.client:sending to (https://service.host/MSCrmServices/2007/MetadataService.asmx) 
message: 
<SOAP-ENV:Envelope xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://schemas.microsoft.com/crm/2007/WebServices" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
    <SOAP-ENV:Header/> 
    <ns0:Body> 
     <ns1:Execute> 
     <ns1:Request xsi:type="ns1:RetrieveAttributeRequest"> 
      <ns1:MetadataId>00000000-0000-0000-0000-000000000000</ns1:MetadataId> 
      <ns1:EntityLogicalName>opportunity</ns1:EntityLogicalName> 
      <ns1:LogicalName>new_typeofcontact</ns1:LogicalName> 
      <ns1:RetrieveAsIfPublished>false</ns1:RetrieveAsIfPublished> 
     </ns1:Request> 
     </ns1:Execute> 
    </ns0:Body> 
</SOAP-ENV:Envelope> 
DEBUG:suds.client:headers = {'SOAPAction': u'"http://schemas.microsoft.com/crm/2007/WebServices/Execute"', 'Content-Type': 'text/xml'} 
DEBUG:suds.transport.http:sending: 
URL:https://service.host/MSCrmServices/2007/MetadataService.asmx 
HEADERS: {'SOAPAction': u'"http://schemas.microsoft.com/crm/2007/WebServices/Execute"', 'Content-Type': 'text/xml', 'Content-type': 'text/xml', 'Soapaction': u'"http://schemas.microsoft.com/crm/2007/WebServices/Execute"'} 
MESSAGE: 
<SOAP-ENV:Envelope xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://schemas.microsoft.com/crm/2007/WebServices" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
    <SOAP-ENV:Header/> 
    <ns0:Body> 
     <ns1:Execute> 
     <ns1:Request xsi:type="ns1:RetrieveAttributeRequest"> 
      <ns1:MetadataId>00000000-0000-0000-0000-000000000000</ns1:MetadataId> 
      <ns1:EntityLogicalName>opportunity</ns1:EntityLogicalName> 
      <ns1:LogicalName>new_typeofcontact</ns1:LogicalName> 
      <ns1:RetrieveAsIfPublished>false</ns1:RetrieveAsIfPublished> 
     </ns1:Request> 
     </ns1:Execute> 
    </ns0:Body> 
</SOAP-ENV:Envelope> 
    C-c C-cTraceback (most recent call last): 
    File "sudstest2.py", line 40, in <module> 
    attr = metadata_client.service.Execute(mdRequest(*picklist)) 
    File "/Users/crose/virtualenv/advanis/lib/python2.6/site-packages/suds/client.py", line 539, in __call__ 
    return client.invoke(args, kwargs) 
    File "/Users/crose/virtualenv/advanis/lib/python2.6/site-packages/suds/client.py", line 598, in invoke 
    result = self.send(msg) 
    File "/Users/crose/virtualenv/advanis/lib/python2.6/site-packages/suds/client.py", line 623, in send 
    reply = transport.send(request) 
    File "/Users/crose/virtualenv/advanis/lib/python2.6/site-packages/suds/transport/https.py", line 64, in send 
    return HttpTransport.send(self, request) 
    File "/Users/crose/virtualenv/advanis/lib/python2.6/site-packages/suds/transport/http.py", line 77, in send 
    fp = self.u2open(u2request) 
    File "/Users/crose/virtualenv/advanis/lib/python2.6/site-packages/suds/transport/http.py", line 118, in u2open 
    return url.open(u2request, timeout=tm) 
    File "/usr/local/Cellar/python/2.6.5/lib/python2.6/urllib2.py", line 397, in open 
    response = meth(req, response) 
    File "/usr/local/Cellar/python/2.6.5/lib/python2.6/urllib2.py", line 510, in http_response 
    'http', request, response, code, msg, hdrs) 
    File "/usr/local/Cellar/python/2.6.5/lib/python2.6/urllib2.py", line 429, in error 
    result = self._call_chain(*args) 
    File "/usr/local/Cellar/python/2.6.5/lib/python2.6/urllib2.py", line 369, in _call_chain 
    result = func(*args) 
    File "/Users/crose/virtualenv/advanis/src/python-ntlm/ntlm/HTTPNtlmAuthHandler.py", line 96, in http_error_401 
    return self.http_error_authentication_required('www-authenticate', req, fp, headers) 
    File "/Users/crose/virtualenv/advanis/src/python-ntlm/ntlm/HTTPNtlmAuthHandler.py", line 35, in http_error_authentication_required 
    return self.retry_using_http_NTLM_auth(req, auth_header_field, None, headers) 
    File "/Users/crose/virtualenv/advanis/src/python-ntlm/ntlm/HTTPNtlmAuthHandler.py", line 80, in retry_using_http_NTLM_auth 
    response = h.getresponse() 
    File "/usr/local/Cellar/python/2.6.5/lib/python2.6/httplib.py", line 986, in getresponse 
    response.begin() 
    File "/usr/local/Cellar/python/2.6.5/lib/python2.6/httplib.py", line 391, in begin 
    version, status, reason = self._read_status() 
    File "/usr/local/Cellar/python/2.6.5/lib/python2.6/httplib.py", line 349, in _read_status 
    line = self.fp.readline() 
    File "/usr/local/Cellar/python/2.6.5/lib/python2.6/socket.py", line 397, in readline 
    data = recv(1) 
    File "/usr/local/Cellar/python/2.6.5/lib/python2.6/ssl.py", line 96, in <lambda> 
    self.recv = lambda buflen=1024, flags=0: SSLSocket.recv(self, buflen, flags) 
    File "/usr/local/Cellar/python/2.6.5/lib/python2.6/ssl.py", line 217, in recv 
    return self.read(buflen) 
    File "/usr/local/Cellar/python/2.6.5/lib/python2.6/ssl.py", line 136, in read 

KeyboardInterrupt 

Finalement, je reçois une erreur de connexion 54 - réinitialisation de la connexion par les pairs - de cela, après avoir attendu une bonne quantité de temps.

Quel est mon meilleur pari pour le débogage?

+0

J'ai un problème très similaire. Une réponse à cette question serait géniale ... – Michael

+0

Quelle version de python? Pas sûr que ce soit pertinent, mais avant 2.6 il y avait un bogue dans la bibliothèque ssl qui a désactivé le timeout tout en faisant la poignée de main ssl. – drevicko

Répondre

0

Ma meilleure idée est d'obtenir quelque chose dans les en-têtes http qui le gâchent. Vous pouvez essayer de faire le même appel avec wget ou curl avec les paramètres debug/verbose et voir ce qu'ils récupèrent.

Cela peut également être une connexion rapide au service. Je l'ai déjà rencontré auparavant, mais ce n'est peut-être pas le seul élément à vérifier.