2

C# ASP .NET アプリケーションには、DataSet を受信して​​処理し、返す Web サービスがあります。

低速の接続では、返却に最大 1 分かかる場合があります。Web サービス メソッドの最後の行が実行された後、データがまだ送信されている間に接続が切断された場合、バックグラウンドで何が起こるでしょうか?

Web サービスのコードを catch ブロックでラップし、ダウンロード中に接続を切断しようとしましたが、Web サービスで例外がスローされませんでした。次のような方法でエラーを検出したいと思います。

[WebMethod(Description = "プロセスデータ")]
public DataSet プロセス(DataSet データ)
{
   ブール成功 = true;
   StartDatabaseTransaction();
   DataSet 結果 = プロセス (データ);
   試す
   {
      結果を返します。//これを実行した後、ケーブルをすばやく引き抜きます
   }
   キャッチ
   {
      成功 = false; //ここには来ない
   }
   最後に
   {
      if (成功) CommitTransaction(); そうでなければRollBackTransaction();
   }
   null を返します。
}
4

2 に答える 2

1

これが正しいアプローチかどうかはわかりませんが、それが重要な場合は、呼び出し元からサーバーへの独自の「承認」呼び出しを作成する必要があります。サーバーが応答を送信すると、確認応答を待つことはないと思います。

それを回避するいくつかの方法:WebサーバーとWebサービスの間にメッセージングシステム(msmq)を使用すると、メッセージングを使用して、保証された配信サービスとしてこの目標を達成できると思います。

または-クライアントに呼び出しとともにGUIDを送信させ、Webサービスにログに記録させます。クライアントが時間どおりに応答を受け取らない場合は、同じGUIDを使用してクライアントに再度呼び出しを発行させます。サーバーにすでにこのGUIDがログに記録されている場合は、呼び出しが処理されたことを意味します(ビジネスロジックに従って処理する必要があります)。

于 2009-10-19T16:24:30.083 に答える
1

私があなたの質問とコードを正しく読んでいれば、webmethods の仕組みが原因で問題が発生することはありません。タイムアウト エラーをトラップする場合は、データセットの受信メソッドにある必要があります。返された時点で、データを変換して送信するのは Web サーバーです。

于 2009-10-15T13:58:17.900 に答える