7

webHttpBinding(soap 1.1)を使用するWCF Webサービスでオブジェクトエラーのインスタンスに設定されていないオブジェクト参照を取得しています。特定の順序で入力パラメーターがある場合、エラーが発生しないことに気付きました。

すなわち

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:not="http://schemas.globalfoundries.com/NotificationService">
   <soapenv:Header/>
   <soapenv:Body>
      <not:NotifyWorkflowItemUpdate>
         <not:userIDs>testUserID</not:userIDs>
         <not:taskID>testTaskID</not:taskID>
         <not:taskType>testTaskType</not:taskType>
         <not:status>testStatus</not:status>
         <not:appID>testAppID</not:appID>
         <not:message>testMessage</not:message>
      </not:NotifyWorkflowItemUpdate>
   </soapenv:Body>
</soapenv:Envelope>

ただし、リクエストテンプレートの入力パラメータの順序を変更すると、前述のエラーが発生します。すなわち(メッセージとuserIDsパラメータが入れ替わっていることに注意してください)

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:not="http://schemas.globalfoundries.com/NotificationService">
   <soapenv:Header/>
   <soapenv:Body>
      <not:NotifyWorkflowItemUpdate>
     <not:message>testMessage</not:message>
         <not:taskID>testTaskID</not:taskID>
         <not:taskType>testTaskType</not:taskType>
         <not:status>testStatus</not:status>
         <not:appID>testAppID</not:appID>
         <not:userIDs>testUserID</not:userIDs>
      </not:NotifyWorkflowItemUpdate>
   </soapenv:Body>
</soapenv:Envelope>

なぜこうなった?リクエストパラメータは、名前ではなく順序を介して.Netメソッドパラメータにマップされていますか?名前付きパラメーターのマッピングを可能にするために、サービスコントラクトで指定する必要のある属性はありますか?

4

2 に答える 2

4

SOAP メッセージの XML スキーマは、順序を指定します。要素の XML 順序では、WCF はスキーマに対して XML を検証しています。

于 2012-07-26T11:40:29.990 に答える