我最近的任务是(残酷而血腥的)用python 3.3为微软dynamicsgp10web服务开发一个SOAP客户端。经过一天左右的wsdl切片和切割,我终于能够使用suds jurko创建一个客户机我可以创建wsdl中定义的对象(类型)并与之交互。但是,当我尝试拨打任何服务电话时,不可避免地会收到400个错误的请求错误。经过半天的研究,我怀疑这与dynamicsgp10web服务使用的wsHttpBinding有关(使用basicHttpBinding的遗留wsdl工作得很好)。
首先,有谁能帮我确认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个错误请求有关。我尝试了suds jurko使用urllib.request时使用的几乎相同的代码,但最终还是出现了400:Bad请求错误,没有重复的头)
任何建议和/或建议将不胜感激。如果你想从我这里得到更多的信息,我将非常乐意提供我所能提供的。提前谢谢。
最佳答案
经过大量的研究、实验和测试,我找到了大部分问题的答案。希望有人能从我学到的东西中受益。我们最终使用了遗留端点。
在回答我的第一个问题时,suds jurko不支持wsHTTPBinding。我不确定在.NET世界之外是否有什么事。
为suds jurko添加wsHTTPBinding支持将是一项重大的任务。您应该能够找到有关基本wsHTTPBinding规范here和here的信息。