2017-10-04 14 views
0

正しいHTTPポストリクエストをサーバーに送信した場合にWebサーバーがHTTP 400(Bad Request)または単にSOAPフォールトメッセージを返すかどうかを指定する仕様はありますか? SOAPリクエスト。その場合の「悪いSOAPリクエストは、」SOAP要素の通常のトリプル始まらない有効なXMLドキュメント、意味:SOAPフォールトとHTTP 400

<soapenv:Envelope>.... 
<soapenv:Header>... 
<soapenv:Body>... 

を代わりに直接、このようなXML要素を持つ:

<namespace:elem ..... 

答えて

0

私は現時点で何の公式も見つけられません。あなたのXMLが不正であれば、経験に基づいて400のHTTPが得られ、SOAPメッセージに何らかの値がないとSOAPのエラーメッセージが出ます。

HTTPは、SOAPサービスで使用される1つのプロトコルです。必要に応じて、STMP(電子メール)やその他のプロトコルを使用してSOAPサービスを実行できます。 HTTPは単なるトランスポートです。したがって、これらの特定のHTTPを標準化文書に含める必要はありません。 SOAP用語のHTTP 400は、本当に悪いメッセージが配信できないことを意味します。

例えば以下のような不正な形式のXMLがHTTP 400与える必要があります:私のメッセージ以下の例では

<nonsense> <!-- opening tag with no closing tag--> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ecol="http://www.blahblahablha"> 
<soapenv:Header/> 
    <soapenv:Body> 
     <ecol:GetDatabaseConnectionInfo/> 
    </soapenv:Body> 
</soapenv:Envelope> 

は、XMLが正しく形成されているため、障害がある?の値を持つGUIDを持っていますメッセージはSOAP障害メッセージで返されます。これを送信

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ec="http://www.blahablha.au/foo" xmlns:irix="http://www.blahblah/IRIX_Headers_V1" xmlns:irix1="http://schemas.datacontract.org/2004/07/IRIXContract.MsgHeaderBase"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <ec:GetAccountActiveArrangement> 
     <ec:GetAccountActiveArrangementReq> 
     <irix:MsgReqHdr> 
      <!--Optional:--> 
      <irix:MsgGUID>?</irix:MsgGUID> 
      <!--Optional:--> 
      <irix:MsgDateTime>?</irix:MsgDateTime> 
      <!--Optional:--> 
      <irix:SecCredInfo> 
       <!--Optional:--> 
       <irix:IRIXUserID>?</irix:IRIXUserID> 
       <!--Optional:--> 
       <irix:IRIXPassword>?</irix:IRIXPassword> 
       <!--Optional:--> 
       <irix:AuthToken>?</irix:AuthToken> 
       <!--Optional:--> 
       <irix:ConsumerSystemID>?</irix:ConsumerSystemID> 
      </irix:SecCredInfo> 
     </irix:MsgReqHdr> 
     <ec:accountNumber>70001</ecol:accountNumber> 

    </ec:GetAccountActiveArrangement> 
    </soapenv:Body> 
</soapenv:Envelope> 

は、次のエラーが発生:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Body> 
    <s:Fault> 
     <faultcode xmlns:a="http://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/dispatcher">a:DeserializationFailed</faultcode> 
     <faultstring xml:lang="en-AU">The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter http://www.blah blah/ECollNXDB_V1:GetAccountActiveArrangementReq. The InnerException message was 'There was an error deserializing the object of type IRIXNXSoapServices.Message.Operations.Account.Get.GetAccountActiveArrangementReqV1. The value '?' cannot be parsed as the type 'Guid'.'. Please see InnerException for more details.</faultstring> 
    <detail> 
     <ExceptionDetail xmlns="http://schemas.datacontract.org/2004/07/System.ServiceModel" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
      <HelpLink i:nil="true"/> 
      <InnerException> 
       <HelpLink i:nil="true"/> 
       <InnerException> 
       <HelpLink i:nil="true"/> 
       <InnerException> 
        <HelpLink i:nil="true"/> 
        <InnerException i:nil="true"/> 
        <Message>Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).</Message> 

は、これは標準的な動作です。

関連する問題