WebRequest BeginGetResponse / EndGetResponse löst bei Verwendung von Task.FromAsync eine Ausnahme aus

Ich versuche, die POST-Operation mithilfe von WebRequest mit einem REST-Webdienst zu synchronisieren.

Nach dem, was ich bereits weiß, muss ich das verwendenTask.Factory.FromAsync<T>(BeginXyz, EndXyz, null), scheint wie es funktioniert für dieGetRequestStream Paar Methoden, da ich keine Ausnahme bekomme und das Byte [] mit Werten gefüllt ist.

Stream requestStream = await Task.Factory.FromAsync<Stream>(
                        request.BeginGetRequestStream, request.EndGetRequestStream, null);
byte[] postBytes = Encoding.UTF8.GetBytes(requestData);
await requestStream.WriteAsync(postBytes, 0, postBytes.Length);

Gut, der obige Code funktioniert und der nächste Teil löst die Ausnahme aus.

WebResponse webResponse = await Task.Factory.FromAsync<WebResponse>(
                        request.BeginGetResponse, request.EndGetResponse, null);

Die Ausnahme bekomme ich zu jeder Anfrage.

System.NotSupportedException: Die angegebene Methode wird nicht unterstützt.

StackTrace:

um System.Net.Browser.AsyncHelper.BeginOnUI (SendOrPostCallback beginMethod, Object state) um System.Net.Browser.ClientHttpWebRequest.EndGetResponse (IAsyncResult asyncResult) um System.Func`2.Invoke (T arg.Tead.Thread.Tasks. TaskFactory`1.FromAsyncCoreLogic (IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1-Versprechen, Boolean requireSynchronization) --- Ende des Stack-Trace von der vorherigen Position, an der die Ausnahme ausgelöst wurde --- bei System.Runtime.CompilerServices .TaskAwaiter.ThrowForNonSuccess (Task task) bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task task) bei System.Runtime.CompilerServices.TaskAwaiter`1.GetResult () bei Gtas.Compiler ()

InnerException StackTrace: bei System.Net.Browser.ClientHttpWebRequest.InternalEndGetResponse (IAsyncResult asyncResult) bei System.Net.Browser.ClientHttpWebRequest. Objekt sendState)

Ein vollständiger Code zum Ausführen der Anforderung sollte folgendermaßen aussehen:

Stream requestStream = await Task.Factory.FromAsync<Stream>(
                        request.BeginGetRequestStream, request.EndGetRequestStream, null);
byte[] postBytes = Encoding.UTF8.GetBytes(requestData);
await requestStream.WriteAsync(postBytes, 0, postBytes.Length);


WebResponse webResponse = await Task.Factory.FromAsync<WebResponse>(
                        request.BeginGetResponse, request.EndGetResponse, null);
Stream streamResponse = webResponse.GetResponseStream();
StreamReader streamRead = new StreamReader(streamResponse);
string responseString = await streamRead.ReadToEndAsync();
// ... Do something with the result data

Ich verstehe nicht ganz, was der Fehler ist.

Ich habe mehrere Implementierungen von Stackoverflow und einigen MSDN-Posts ausprobiert. Nichts scheint zu funktionieren.

Verwenden von Rückrufen funktioniert einwandfrei. Aber es ist gut zu wissen, warum ich es nicht zum Laufen bringen kann.

Irgendwelche Gedanken, wie man das erreicht?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage