使用suds-jurko的Dynamics GP的Python 3 SOAP客户端

时间:2014-04-16 00:35:44

标签: python web-services soap python-3.x suds

我最近负责在python 3.3中为Microsoft Dynamics GP 10 Web服务开发SOAP客户端(残酷和血腥)的任务。经过一天左右的wsdl切片和切块,我终于能够使用suds-jurko创建一个客户端。我可以创建wsdl中定义的对象(类型)并与之交互。但是,当我尝试进行任何服务调用时,我不可避免地收到400 Bad Request错误。经过半天的研究,我怀疑这与Dynamics GP 10 Web服务使用的wsHttpBinding有关(遗留的wsdl,使用basicHttpBinding工作得很好)。

首先,任何人都可以向我确认suds-jurko是否支持wsHttpBinding?我怀疑它没有,但我希望以某种方式确认,以便我知道我是否正朝着正确的方向前进。

其次,假设suds-jurko不支持wsHttpBinding,我需要做些什么才能将wsHttpBinding的支持添加到suds-jurko?我理解basicHttpBinding和wsHttpBinding之间的基本区别,但是我很难找到任何关于SOAP客户端在这两种绑定方案中需要做什么不同的具体资源(绝大多数资源我都是在线讨论如何配置.NET Web服务以使用wsHttpBinding,这对我来说没用。

这是我当前客户端发送的请求。该请求与支持wsHttpBinding的客户端生成的请求有何不同(或不同)?

HEADERS: {'Content-Type': 'application/soap+xml; charset=utf-8', 
          'Content-type':    'application/soap+xml; charset=utf-8',
          'SOAPAction': b'"http://schemas.microsoft.com/dynamics/gp/2010/01/ICompany/GetCompanyList"',
          'Soapaction': b'"http://schemas.microsoft.com/dynamics/gp/2010/01/ICompany/GetCompanyList"'}

MESSAGE: <?xml version="1.0" encoding="UTF-8"?>
         <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
           xmlns:ns0="http://schemas.microsoft.com/dynamics/gp/2010/01"
           xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/"
           xmlns:ns2="http://schemas.datacontract.org/2004/07/Microsoft.Dynamics.GP"
           xmlns:ns3="http://schemas.datacontract.org/2004/07/Microsoft.Dynamics.Common"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
             <SOAP-ENV:Header/>
             <ns1:Body>
                 <ns0:GetCompanyList>
                     <ns0:criteria>
                         <ns3:columns/>
                         <ns3:convertToUpperCaseRestriction/>
                         <ns3:restrictions/>
                         <ns2:Id>
                             <ns3:From>-32000</ns3:From>
                             <ns3:To>32000</ns3:To>
                         </ns2:Id>
                     </ns0:criteria>
                     <ns0:context>
                         <ns3:CultureName>en-US</ns3:CultureName>
                         <ns3:CurrencyType>Transactional</ns3:CurrencyType>
                         <ns3:OrganizationKey xsi:type="ns3:CompanyKey">
                             <ns3:Id>-1</ns3:Id>
                         </ns3:OrganizationKey>
                     </ns0:context>
                 </ns0:GetCompanyList>
             </ns1:Body>
         </SOAP-ENV:Envelope>

(我注意到重复的标题,并想知道这是否与400 Bad Request错误有关。我尝试了几乎与suds-jurko使用urllib.request相同的代码,但仍然以400:Bad Request结束没有重复标题的错误)

非常感谢任何建议和/或建议。如果您想了解我的更多信息,我将非常乐意尽我所能。提前谢谢。

1 个答案:

答案 0 :(得分:4)

经过大量的研究,实验和测试,我能够找到大部分问题的答案。希望有人可以从我学到的东西中受益。我们最终选择了传统端点。

在回答我的第一个问题时,suds-jurko不支持wsHTTPBinding。我不确定.NET世界之外是否有任何东西。

为suds-jurko添加wsHTTPBinding支持将是一项重大任务。您应该能够找到有关基本wsHTTPBinding规范herehere的信息。