2012-02-29 61 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