Mein Ziel ist es, eine asynchrone HttpWebRequest erneut zu versuchen, wenn es fehlschlägt.
Wenn ich Abort () ein HttpWebRequest, kann ich BeginGetResponse nicht starten () nochmal. Die einzige Möglichkeit, wahrscheinlich erneut anzufragen, ist das HttpWebRequest-Objekt neu zu erstellen. Es scheint eine Menge Arbeit zu erfordern, da ich alle Eigenschaften vom alten Objekt kopieren müsste. Gibt es eine Abkürzung?
Hinweis: Ich denke, dass Serialisierung mein Problem lösen würde, aber diese Klasse wird nicht serialisieren, wie in einem vorherige Frage .
Aktualisieren Der Beispielquellcode wurde entfernt, weil er nicht mehr benötigt wurde
Aktuelle Ansicht zu diesem Thema Es gibt keine Verknüpfung, die einzige Möglichkeit, die Anfrage zu wiederholen, ist das Erstellen eines anderen HttpWebRequest-Objekts auf die gleiche Weise, wie Sie das Original erstellt haben.
Sie müssen nur ein neues HttpWebRequest
erstellen und alle Eigenschaften vom alten Objekt über Reflektion dorthin kopieren.
Hier ist eine Erweiterungsmethode , die das tut:
%Vor%Wenn Sie dieselbe Anfrage erneut ausgeben möchten, führen Sie einfach Folgendes aus:
%Vor%Es ist nicht möglich.
Eine HTTPWebRequest-Instanz repräsentiert buchstäblich eine Anforderungsinstanz (obwohl es Randfälle gibt, in denen sie intern erneut versucht wird) und ist daher nicht logisch wiederholbar. Es kann genau eine Antwort zurückgeben (Anfrage / Antwort ist ein logisches Paar), und obwohl Sie diese Antwort mehrmals überprüfen können, erhalten Sie genau das gleiche Objekt.
Grundsätzlich denken Sie, dass eine HTTPWebRequest-Instanz eine Art Fabrik ist, aber sie ist wirklich konkret. Sie müssen eine weitere Instanz erstellen.
Wo versuchst du die Anfrage zu serialisieren? Es könnte eine gute Idee sein, die Anforderung vor zu serialisieren, die Sie versuchen, zu erstellen, und dann die Anforderung bei einem Fehler (von der serialisierten Instanz) erneut zu senden.
Vielleicht möchten Sie auch den Proxy entfernen, die Instanz serialisieren und dann den Proxy zurückstellen, da dies der Punkt zu sein scheint, an dem das Problem beim Serialisieren der Anfrage liegt.
Es gibt keine Verknüpfung, die einzige Möglichkeit, die Anforderung zu wiederholen, ist das Erstellen eines anderen HttpWebRequest-Objekts auf die gleiche Weise, wie Sie die ursprüngliche erstellt haben.
Tags und Links .net c# httpwebrequest