Ist es sicher für die Verwendung von 'Verwendung' statt, den Abschluss einer WebResponse-und StreamReader -
Derzeit
Ich habe implementiert eine einfache Hilfsmethode für HttpWebRequest
genannt GetResponse(url)
. Derzeit bin ich manuell schließen die WebResponse
und StreamReader
nach dem Lesen das Ergebnis. Ich bin dann wieder sagte, das Ergebnis in etwa so:
//construct the request
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
//get the result
WebResponse response = request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
string result = reader.ReadToEnd();
//clean up and return the result
reader.Close();
response.Close();
return result;
Vorgeschlagen
Ist es sicher umfassen die Rücksendung innerhalb using
Aussagen nicht geschlossen werden; diese haben die gleiche Wirkung wie die .Close()
es?
//construct the request
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
//get the result
using (WebResponse response = request.GetResponse())
{
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
return reader.ReadToEnd();
}
}
- Gute Frage, denn es ist sicherlich nicht völlig sicher für das WCF msdn.microsoft.com/en-us/library/aa355056(v=vs. 110).aspx, wenn einige Ausnahmen bedürfen
.Abort()
genannt zu werden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das ist nicht nur sicher - es ist sicherer als das original, dass es entsorgen Sie die Objekte, selbst wenn eine exception geworfen wird; ein
using
- Anweisung ist äquivalent zu einemtry
/finally
- Anweisung.In der Regel, Wann immer Sie schreiben Sie ein
Close()
oderDispose()
nennen explizit, überlegen Sie, ob Sie könnte einusing
- Anweisung anstelle.(Beachten Sie, dass Sie nicht mit der Kodierung der web-Antwort, die durch die Art und Weise - du bist immer vorausgesetzt, UTF-8. Mit
WebClient
statt, wird dies einfacher, wenn das ist eine option.)WebClient
Klasse, scheint zu bieten, was ich versucht habe zu erreichen. Ich fahre die Anforderung etwas höher, also kann ich davon ausgehen, daß die Reaktion sein wirdapplication/json
.using
oder nicht.using
- Anweisung und die innere? Ignorieren asynchrone Ausnahmen, ist das sicherlich ein problem. Ich glaube nicht, dass ich je gesehen habe das ein problem - überall woIDisposable
schlecht und bat Sie, es zu beheben. Als pro MSDN: "Ein korrekt umgesetzt Dispose-Methode mehrmals aufgerufen werden kann, ohne eine Ausnahme zu werfen."Ich würde vorschlagen, dies zu tun:
es ist sicher zu verwenden, "mit", es wird über die WebResponse-und StreamReader, aber es nicht garantieren, es wird führen Sie das zurück.
ist das gleiche wie
Also es ist fast dasselbe wie dein code, aber sicherer, da der try/finally-block.
finally
stattcatch
. Es läuft die dispose-code, auch wenn es keine Ausnahme.