我最近负责在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结束没有重复标题的错误)
非常感谢任何建议和/或建议。如果您想了解我的更多信息,我将非常乐意尽我所能。提前谢谢。