2012-02-29 24 views
5

Delphi 2010とIndyを使用してWebサービスを使用しようとしています。私のプログラムで作成したものと比較するために使用可能なSOAPストリームを確立するために、私はSOAPUIでテストしています。私は、WSDLファイルで指定されたSOAPストリームと一致するWebサービスプロバイダによって提供される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の不審午前:UsernameTokenを。私は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サービスのパブリッシャが提供する例で使用されている形式ではありません。参照のプレーンテキストバージョンはノンスを使用しません。この例のメッセージはnonceを使用しますが、プレーンテキストのパスワードを要求します。パスワードダイジェストなしでナンスを使用しても、メッセージにセキュリティは追加されません。どのように作成するかの同意がない場合は、任意の文字列にすることができます。私はポイントを逃していますか?

私は、これは退屈な作業のように見える必要があります知っているが、私はここにこれを提供することで、多分私達は一緒に来て次の人に少しの援助を提供できることを期待しています。

0

私もこの問題を抱えています。 Webサービスの発行者(edd.ca.gov)は、「値がSOAP 1.2規格で要求される」まだ私はそのための有効なサポートを見つけるいないことを示すことによって答えました。我々は両方が同じ道(FSET)に向かっているように見えます、そして、おそらく我々はチームを組んで一緒に仕事をしなければならない、2つの頭が1つより良いです。私はサンプルコード内で多くの間違いを見つけましたが、私はまだそれを動作させています。

+1

EDDですぐに利用できる人はあまり役に立たないようです。私はいくつかのことに集中できるように、このプロジェクトをしばらくお待ちしていました。私はそれに戻らなければならないだろうが、私はまだ時間を置いていない。私は努力を組み合わせること以上に喜んでいます。 SOにはプライベートメッセージ機能があるとは思えませんが、コラボレーションを心がけている方はもう一度コメントして、オフラインでコミュニケーションをとる方法を見つけ出します。それは、「ルールを破る」していない場合 – jrodenhi

+0

、私は私の電子メールを投稿できる –

+0

実は、私のメールアドレスは私のプロファイルです。私はあなたのメールアドレスを掲載するとの唯一の問題は、それはあなたがスパムの束を得ることにつながる可能性があることだと思います。私はあなたの電子メールアドレスを投稿しないことは、沢山のスパムを取得しないことにつながるとは思っていませんが、誰が私は言うのですか? – jrodenhi

関連する問題