2011-09-21 130 views
2

我试着发送电子邮件通过Exchange Web服务使用肥皂水0.4.1 Exchange 2010的SOAP调用:Exchange Web服务(EWS) - 通过泡沫

​​

我能够验证正常,但是我一直收到以下错误:

Traceback (most recent call last): 
    File "soap.py", line 10, in <module> 
    c = Client(url, transport=ntlm) 
    File "build\bdist.win32\egg\suds\client.py", line 112, in __init__ 
    File "build\bdist.win32\egg\suds\reader.py", line 152, in open 
    File "build\bdist.win32\egg\suds\wsdl.py", line 159, in __init__ 
    File "build\bdist.win32\egg\suds\wsdl.py", line 220, in build_schema 
    File "build\bdist.win32\egg\suds\xsd\schema.py", line 93, in load 
    File "build\bdist.win32\egg\suds\xsd\schema.py", line 305, in open_imports 
    File "build\bdist.win32\egg\suds\xsd\sxbasic.py", line 542, in open 
    File "build\bdist.win32\egg\suds\xsd\sxbasic.py", line 563, in download 
    File "build\bdist.win32\egg\suds\xsd\schema.py", line 397, in instance 
    File "build\bdist.win32\egg\suds\xsd\schema.py", line 226, in __init__ 
    File "build\bdist.win32\egg\suds\xsd\schema.py", line 305, in open_imports 
    File "build\bdist.win32\egg\suds\xsd\sxbasic.py", line 542, in open 
    File "build\bdist.win32\egg\suds\xsd\sxbasic.py", line 563, in download 
    File "build\bdist.win32\egg\suds\xsd\schema.py", line 397, in instance 
    File "build\bdist.win32\egg\suds\xsd\schema.py", line 226, in __init__ 
    File "build\bdist.win32\egg\suds\xsd\schema.py", line 305, in open_imports 
    File "build\bdist.win32\egg\suds\xsd\sxbasic.py", line 542, in open 
    File "build\bdist.win32\egg\suds\xsd\sxbasic.py", line 560, in download 
    File "build\bdist.win32\egg\suds\reader.py", line 79, in open 
    File "build\bdist.win32\egg\suds\reader.py", line 95, in download 
    File "build\bdist.win32\egg\suds\transport\https.py", line 60, in open 
    File "build\bdist.win32\egg\suds\transport\http.py", line 62, in open 
    File "build\bdist.win32\egg\suds\transport\http.py", line 118, in u2open 
    File "C:\Python26\lib\urllib2.py", line 391, in open 
    response = self._open(req, data) 
    File "C:\Python26\lib\urllib2.py", line 409, in _open 
    '_open', req) 
    File "C:\Python26\lib\urllib2.py", line 369, in _call_chain 
    result = func(*args) 
    File "C:\Python26\lib\urllib2.py", line 1170, in http_open 
    return self.do_open(httplib.HTTPConnection, req) 
    File "C:\Python26\lib\urllib2.py", line 1143, in do_open 
    r = h.getresponse() 
    File "C:\Python26\lib\httplib.py", line 990, in getresponse 
    response.begin() 
    File "C:\Python26\lib\httplib.py", line 391, in begin 
    version, status, reason = self._read_status() 
    File "C:\Python26\lib\httplib.py", line 355, in _read_status 
    raise BadStatusLine(line) 
httplib.BadStatusLine 

任何建议,将不胜感激。谢谢

+0

打开完整的SUDS日志记录以准确找出造成错误的URL。我遇到了类似的问题,结果发现超负荷的www.w3.org服务器是问题所在。解决方案是使用www.w3.org模式的静态缓存。看到这个答案:http://stackoverflow.com/a/8562410/3571 – codeape

回答

1

我也遇到过这个问题。但是,我只是间歇性地得到这个错误。我发现另一篇文章提到了一个可能的解决方案,它有助于一些(我得到的错误较少),但它没有完全解决问题。

问题似乎是Exchange服务器在发送有效响应之前关闭连接。如果其他人可以添加更多,我将不胜感激。这一直让我疯狂。

或许,这可以帮助你: urllib2 is throwing an error for an url , while it's opening properly in browser

我不知道,如果你已经在做了,但我需要设置我的脚本下载messages.xsd,types.xsd和服务.wsdl在本地并修补它。与以下:

def setup(self): 
    '''Patches the WSDL file to include a service tag. Returns path to 
    local WSDL file.''' 
    trans = self.transport 
    try: 
     makedirs(self.localdir) 
    except OSError: 
     # Directory already exists 
     pass 

    # Download messags.xsd file 
    messages_url = '%s/messages.xsd' % self.urlprefix 
    with open('%s/%s' % (self.localdir, 'messages.xsd'), 'w') as msg_xsd: 
     msg_xsd.write(trans.geturl(messages_url, trans.authtype)) 

    # Download types.xsd file 
    types_url = '%s/types.xsd' % self.urlprefix 
    with open('%s/%s' % (self.localdir, 'types.xsd'), 'w') as types_xsd: 
     types_xsd.write(trans.geturl(types_url, trans.authtype)) 

    # Modify WSDL to add service description 
    service_url = '%s/Exchange.asmx' % self.urlprefix 
    servicexml = ''' 
     <wsdl:service name="ExchangeServices"> 
      <wsdl:port name="ExchangeServicePort" binding="tns:ExchangeServiceBinding"> 
        <soap:address location="%s"/> 
       </wsdl:port> 
      </wsdl:service> 
     </wsdl:definitions>''' % service_url 
    localwsdl = '%s/%s' % (self.localdir, 'Services.wsdl') 
    wsdlxml = trans.geturl(self.wsdl, trans.authtype) 
    with open(localwsdl, 'w') as wsdl: 
     wsdl.write(wsdlxml.replace('</wsdl:definitions>', servicexml)) 

    return localwsdl 

希望这会指出你在正确的方向。简单地与泡沫交谈是一个重大挑战。我在这里找到一些帮助,以及已经提供了基础为我的项目的示例代码:

http://lists.fedoraproject.org/pipermail/suds/2010-September/001144.html

更新: 发送正确的SOAP消息头与RequestServerVersion:

<?xml version="1.0" encoding="utf-8"?> 
    <soap:Envelope> 
    <soap:Header> 
     <t:RequestServerVersion Version="Exchange2010"/> 
    </soap:Header> 
    <soap:Body> 
    </soap:Body> 
</soap:Envelope> 

我为了简洁起见,我已经截断了xml。

+0

我找到了我用于我的项目的demo.py和Exchange.py脚本的链接。 [link] http://web.archiveorange.com/archive/v/QOiOM0hVaQTkgK3oowG6 – serialworm

+0

我发现了这是为什么发生。它看起来像一个泡沫客户端初始化时,它从http://www.w3.org/2001/xml.xsd下载模式定义。由于需要从w3.org获取模式文件的Web应用程序增加,服务器超时并返回空响应。建议在本地缓存模式定义。希望这可以帮助。 http://lists.w3.org/Archives/Public/site-comments/2011Apr/0026.html – serialworm

+0

非常感谢,我非常感谢您提供的所有信息。我一直在为此挣扎好几天。感谢代码,但我已经在使用它。我从你为demo.py和Exchange.py提供的链接中找到了它。问题是我总是得到BadStatusLine,它对我而言并不是一次工作。 –

相关问题