9

私の目的は、失敗したときに非同期 HttpWebRequest を再試行することです。

HttpWebRequestをAbort()すると、BeginGetResponse() を再度実行できません。したがって、再度リクエストする唯一の方法は、おそらく HttpWebRequest オブジェクトを再作成することです。古いオブジェクトからすべてのプロパティをコピーする必要があるため、多くの作業が必要になるようです。ショートカットはありますか?

注: シリアル化で問題が解決すると思いますが、前の質問で説明したように、このクラスはシリアル化されません。

更新不要なため、サンプル ソース コードを削除しました

この問題に関する現在の見解近道はありません。リクエストをやり直す唯一の方法は、元のオブジェクトを作成したのと同じ方法で別の HttpWebRequest オブジェクトを作成することです。

4

4 に答える 4

14

不可能です。

HTTPWebRequest インスタンスは文字通り 1 つのリクエスト インスタンスを表すため (ただし、内部で再試行するエッジ ケースがあります)、論理的に繰り返すことができるものではありません。正確に 1 つの応答 (要求/応答は論理ペア) を返すことができ、その応答を複数回検査することはできますが、まったく同じオブジェクトが得られます。

基本的に、HTTPWebRequest インスタンスは一種のファクトリだと考えていますが、実際には具体的です。別のインスタンスを作成する必要があります。

于 2009-01-28T15:48:33.527 に答える
2

ショートカットはありません。リクエストをやり直す唯一の方法は、元のオブジェクトを作成したのと同じ方法で別の HttpWebRequest オブジェクトを作成することです。

于 2009-01-12T14:44:41.533 に答える
2

リクエストをどこでシリアル化しようとしていますか? リクエストを作成するにシリアライズし、失敗した場合に (シリアライズされたインスタンスから) リクエストを再送信することをお勧めします。

また、プロキシを削除し、インスタンスをシリアライズしてから、プロキシを元に戻すこともできます。これは、リクエストのシリアライズに問題があるように思われるためです。

于 2009-01-05T02:27:22.530 に答える