2012-02-29 65 views
5

我试图消耗用Delphi 2010和印Web服务请求无效。要建立一个可用的SOAP流来与我的程序创建的流进行比较,我正在SOAPUI中进行测试。我正在使用由Web服务提供者提供的SOAP流,它也与WSDL文件中指定的SOAP流相匹配。我正在从服务中收到HTTP 400(错误请求)错误。在SOAPUI

从我可以在网上找到,看来接收HTTP 400错误表明您的SOAP请求是不正确,无法通过Web服务来读取。我已经使用XMLPad测试了我的SOAP流,XML似乎已经很好地形成了。我想这可能意味着某些东西不符合它的模式要求。我将首先检查密码的模式描述,以防预期不会以纯文本形式发送。还有什么我应该检查以消除HTTP 400错误?

这里是我的要求(较少的用户名和密码)的情况下,它可以帮助:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" 
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" 
xmlns:xop="http://www.w3.org/2004/08/xop/include" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://wwww3.org/2001/XMLSchema-instance"> 
    <soap:Header> 
     <wsa:Action>http://edd.ca.gov/SendTransmission</wsa:Action> 
     <wsa:MessageID>urn:uuid:5aa788dc-86e1-448b-b085-2d2743cf9f26</wsa:MessageID> 
     <wsa:ReplyTo> 
     <wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address> 
     </wsa:ReplyTo> 
     <wsa:To>http://fsettestversion.edd.ca.gov/fsetproxy/fsetservice.asmx</wsa:To> 
     <wsse:Security soap:mustUnderstand="1"> 
     <wsse:UsernameToken wsu:Id="UsernameToken"> 
      <wsse:Username>#USERNAME#</wsse:Username> 
      <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">#PASSWORD#/wsse:Password> 
      <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">O5QWht1bslLCX6KnlEypAA==</wsse:Nonce> 
      <wsu:Created>2012-02-29T22:32:38.250Z</wsu:Created> 
     </wsse:UsernameToken> 
     <wsu:Timestamp wsu:Id="Timestamp-805a7373-335c-43b6-ba21-6596c4848dbf"> 
      <wsu:Created>2012-02-22T15:41:42Z</wsu:Created> 
      <wsu:Expires>2012-02-22T15:46:42Z</wsu:Expires> 
     </wsu:Timestamp> 
     </wsse:Security> 
    </soap:Header> 
    <soap:Body> 
     <SendTransmission xmlns="http://edd.ca.gov/"> 
     <SendTransmissionRequest xmlns="http://www.irs.gov/a2a/mef/MeFTransmitterServiceWse.xsd"> 
      <TransmissionDataList> 
       <Count>1</Count> 
       <TransmissionData> 
        <TransmissionId>123456789</TransmissionId> 
        <ElectronicPostmark>2012-02-22T07:41:42.2502206-08:00</ElectronicPostmark> 
       </TransmissionData> 
      </TransmissionDataList> 
     </SendTransmissionRequest> 
     <fileBytes> 
      <xop:Include href="cid:[email protected]"/> 
     </fileBytes> 
     </SendTransmission> 
    </soap:Body> 
</soap:Envelope> 

回答

2

有可能是别的东西,但在那一刻,我怀疑的WSSE的:用户名令牌。我在http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0.pdf下载了文档,并在昨晚阅读。它是用相当通俗的语言写成的,我觉得我明白它的意思,但它给我留下的问题比我最初问的问题小。本文档建议您可以使用以下格式的纯文本密码:

<S11:Envelope xmlns:S11="..." xmlns:wsse="..."> 
    <S11:Header> 
    ... 
    <wsse:Security> 
     <wsse:UsernameToken> 
     <wsse:Username>Zoe</wsse:Username> 
     <wsse:Password>IloveDogs</wsse:Password> 
     </wsse:UsernameToken> 
    </wsse:Security> 
    ... 
    </S11:Header> 
... 
</S11:Envelope> 

或者您可以使用密码摘要。它定义了一个密码摘要如下:

Password_Digest = Base64的(SHA-1(随机数+创建+密码))

根据参考文献,对于一个密码摘要将如下所示的格式:

<S11:Envelope xmlns:S11="..." xmlns:wsse="..." xmlns:wsu= "..."> 
    <S11:Header> 
    ... 
    <wsse:Security> 
    <wsse:UsernameToken> 
     <wsse:Username>NNK</wsse:Username> 
     <wsse:Password Type="...#PasswordDigest"> 
     weYI3nXd8LjMNVksCKFV8t3rgHh3Rw== 
     </wsse:Password> 
     <wsse:Nonce>WScqanjCEAC4mQoBE07sAQ==</wsse:Nonce> 
     <wsu:Created>2003-07-16T01:24:32Z</wsu:Created> 
    </wsse:UsernameToken> 
    </wsse:Security> 
    ... 
    </S11:Header> 
... 
</S11:Envelope> 

这不是Web服务发布者提供的示例中使用的格式。参考中的纯文本版本不使用随机数。示例消息使用随机数,但要求使用纯文本密码。在我看来,使用不带密码摘要的随机数不会为消息增加任何安全性。如果没有关于如何创建它的协议,它可以是任何随机字符串。我错过了这一点吗?

我知道这必须看起来像一个繁琐的任务,但我希望通过在这里提供了这一点,也许我们可以提供给磨磨蹭蹭旁边的人一点帮助。

0

我也有遇到过这个问题。 Web服务发布者(edd.ca.gov)回应说,“SOAP 1.2标准要求价值”,但我没有找到有效的支持。看起来我们两个都在走相同的道路(FSET),也许我们应该合作并一起工作,两个头比一个好。我在示例代码中发现了很多错误,我也没有得到它的工作。

+1

它似乎是谁在EDD都是现成的人们是不会有太大帮助。我把这个项目搁置了一段时间,以便我可以专注于其他一些事情。我将不得不回到它,但我还没有留出时间。我会非常乐意合作。我没有看到SO具有私人消息功能,但如果您认真对待协作,请再次发表评论,并且我们会找出离线进行通信的方式。 – jrodenhi 2012-07-19 19:49:00

+0

我可以张贴我的电子邮件,如果不“打破规则” – 2012-07-19 19:53:16

+0

其实,我的电子邮件地址是我的个人资料。我认为发布您的电子邮件地址唯一的问题是它可能会导致您收到一堆垃圾邮件。我不认为不发布你的电子邮件地址导致没有收到一堆垃圾邮件,但我是谁说的。 – jrodenhi 2012-07-20 00:05:55