2016-08-31 2 views
0

ich unten Code habe, das Problem verursacht, während der DatenGetAsync Timeout Problem verursacht

var result = client.GetAsync(requestUri).Result; 

Holen Wenn ich requestUri von Browser schlug dann funktioniert es gut. aber von oben Code gibt es unter Fehler.

Fehler:

ein oder mehrere Fehler occurred.An Fehler aufgetreten, während die request.The Senden zugrunde liegende Verbindung wurde geschlossen: Ein unerwarteter Fehler ist aufgetreten auf einem send.Authentication fehlgeschlagen, da die Gegenstelle den Transport geschlossen hat Strom.

Stapel Trace1:

bei System.Threading.Tasks.Task 1.GetResultCore(Boolean waitCompletionNotification) at foo(String resultUrl) at dooo(String param, String resultUrl) at foo.<>c__DisplayClass2.<Product>b__0(String x, String y) at foo[T](Func 3 fn) bei System.Net.HttpWebRequest.EndGetResponse (IAsyncResult asyncResult) bei System.Net.Http.HttpClientHandler.GetResponseCallback (IAsyncResult ar) bei System.Net.TlsStream.EndWrite (IAsyncResult asyncResult) bei System.Net.ConnectStream.WriteHeadersCallback (IAsyncResult ar)

Stapel Trace2

bei System.Threading.Tasks.Task 1.GetResultCore(Boolean waitCompletionNotification) at Foo1(String resultUrl) at Foo2(String param, String resultUrl) at Foo3.<>c__DisplayClass2.<Product>b__0(String x, String y) at Foo4(Func 3 fn) bei System.Net.HttpWebRequest.EndGetResponse (IAsyncResult asyncResult) bei System.Net.Http.HttpClientHandler.GetResponseCallback (IAsyncResult ar) bei System.Net. TlsStream.EndWrite (IAsyncResult asyncResult) bei System.Net.ConnectStream.WriteHeadersCallback (IAsyncResult ar) bei System.Web.Http.Controllers.ApiControllerActionInvoker.d__0.MoveNext() --- Ende des Stack-Trace von früheren Speicherort, wo Ausnahme wurde geworfen --- bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Task-Task) bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Aufgabe t Fragen Sie) bei System.Runtime.CompilerServices.TaskAwaiter 1.GetResult() at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__5.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__5.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter 1.GetResult() bei System.Web.Http.Filters.ActionFilterAttribute.d__0.MoveNext() --- Ende des Stack-Trace von früheren Speicherort, wo 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 System .Web.Http.Filters.ActionFilterAttribute.d__5.MoveNext()

Auch ich versuchte einen ersichtlichen Anruf, aber kein Glück. Können wir das Anforderungstimeout für die get-Anforderung in diesem Szenario erhöhen?

Awaitable Code habe ich versucht,

var result = await client.GetAsync(requestUri); 
       if (!result.IsSuccessStatusCode) throw new Exception(string.Format("Unable to receive data from Uri: {0}", uri.ToString())); 

       // write the results 
       using (var write = File.Create(filePath)) 
       using (var read = await result.Content.ReadAsStreamAsync()) 
       { 
        read.Seek(0, SeekOrigin.Begin); 
        read.CopyTo(write); 
       } 
+1

tun Sie einige innere Ausnahmen haben?dort könnte es mehr Infos geben –

+1

Verwenden Sie nicht '.Result', entweder machen Sie Ihren Call-Stack async und verwenden Sie' erwarten' oder wechseln von 'HttpClient' zu' WebClient' und verwenden Sie es synchrone Methoden. –

+0

@ScottChamberlain: Ja, ich habe das auch versucht. –

Antwort