web-dev-qa-db-ja.com

SOAPエラー:「サーバーはリクエストを処理できませんでした」「オブジェクト参照がオブジェクトのインスタンスに設定されていません」

SOAPリクエストをIISでローカルにサービスに送信すると、すべてが正常に動作します。SOAP別のホストでIISで実行されているのと同じサービスに要求すると、すべてが正常に動作します。

しかし、別のプログラマがSOAPリクエストをサービスに送信すると、サービス内の1つのメソッドを返す以外は、通常、適切な応答が得られます。

<soap:Body>
<soap:Fault>
  <faultcode>soap:Server</faultcode>
  <faultstring>Server was unable to process request. ---&gt; Object reference not set to an instance of an object.</faultstring>
  <detail />
</soap:Fault>

彼がこのエラーを受け取っている理由を理解する必要があります。

彼のSOAP要求はSOAP要求とまったく同じですが、私の要求は機能しますが、彼は機能しません。

14
Rodniko

みんなの助けに感謝します。私は問題を解決しました。

Soapリクエストの「SoapAction」フィールドに間違ったURIがありました

HTTPスニファーの使用をお勧めします。 httpスニファーはSOAPプロパティを表示します。

"SOAPAction"プロパティは次のようになります。 http://tempuri.org/YourServiceMethodName

7
Rodniko

「オブジェクト参照」エラーは、エラーの発生場所が正確にわからない場合のトラブルシューティングが最も困難です。このエラーの最も明白な原因はオブジェクトが初期化されていないか、オブジェクトまたは値が含まれていると予想されるときに変数にnull値が設定されているためです。必ずnull値をテストしてください。

また、エラー処理のベストプラクティスに従っていることを確認してください。より高いレベルのエラーハンドラーに意図的にエラーをキャッチさせるつもりがない限り、できるだけ早いレベルでエラーをキャッチするようにしてください。このエラーが発生しているという事実は、エラー処理が十分でないことを意味します。

最後に、エラーハンドラーに何らかのロギングメカニズムを含めることを強くお勧めします。エラーをイベントログまたはデータベースに保存するか、メールで送信します。エラーがどこにあるのか正確にわかるように、何でもかまいません。 エラーをユーザーに表示しないでください

これにはいくつかのオプションがあります。 Asp.Net Health Monitoring Webサービスおよび標準のasp.netサイトで正常に動作します。 [〜#〜] elmah [〜#〜] もあります。または、これを行うための独自のコードを書くこともできます。

これらのガイドラインに従えば、エラーの発生状況を理解できなくなることはありません。適切にトラブルシューティングするために必要な情報が得られ、アプリはより堅固になります。

6
David