System.Net.Http.HttpClient不尊重超时,每次使用默认值 [英] System.Net.Http.HttpClient not Respect timeouts and use everytime the default Value

查看:272
本文介绍了System.Net.Http.HttpClient不尊重超时,每次使用默认值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用HttpClient与具有很多API的Web服务(由我的公司编写)进行交互.所有的api都工作得很好,除非其中一个(较大和较慢)需要100秒钟以上的时间来给出答案,在那段时间我收到以下错误消息(注意:如果api所用时间少于100s,则一切正常):/p>

I'm using HttpClient to interact with a webservice (written by my Company) with a lot of apis. All the apis work great except when one of that (the bigger and slower) take more than 100 seconds to give an answer, passed that time i receive the following error(N.B: If the api take less than 100s all works well):

System.Net.Http.HttpRequestException: An error occurred while sending the request ---> System.Net.WebException: The operation has timed out.
  at System.Net.HttpWebRequest+<RunWithTimeoutWorker>d__241`1[T].MoveNext () [0x000c5] in <3e9b3e26c4694baab3f689687ad40612>:0 
--- End of stack trace from previous location where exception was thrown ---
  at System.Net.HttpWebRequest.EndGetResponse (System.IAsyncResult asyncResult) [0x00020] in <3e9b3e26c4694baab3f689687ad40612>:0 
  at System.Threading.Tasks.TaskFactory`1[TResult].FromAsyncCoreLogic (System.IAsyncResult iar, System.Func`2[T,TResult] endFunction, System.Action`1[T] endAction, System.Threading.Tasks.Task`1[TResult] promise, System.Boolean requiresSynchronization) [0x0000f] in <d4a23bbd2f544c30a48c44dd622ce09f>:0 
--- End of stack trace from previous location where exception was thrown ---
  at System.Net.Http.HttpClientHandler+<SendAsync>d__64.MoveNext () [0x0041d] in <25ebe1083eaf4329b5adfdd5bbb7aa57>:0 
   --- End of inner exception stack trace ---
  at System.Net.Http.HttpClientHandler+<SendAsync>d__64.MoveNext () [0x00478] in <25ebe1083eaf4329b5adfdd5bbb7aa57>:0 
--- End of stack trace from previous location where exception was thrown ---
  at System.Net.Http.HttpClient+<SendAsyncWorker>d__49.MoveNext () [0x000ca] in <25ebe1083eaf4329b5adfdd5bbb7aa57>:0 

所有IIS和Web服务超时都设置为5分钟,因此我认为我可以排除这是Web服务超时问题,并且在应用程序上,我将HttpClient超时设置为10分钟(但是即使我设置了,它也无法正常工作)5分钟),就像您在下面的代码中看到的一样.我在做什么错了?

All the IIS and webservice Timeouts are setted to 5 minutes, so i think i can exclude that is a Webservice Timeout Problem and on the app i set the HttpClient timeout to 10 minutes (but it doesn't work even if i set it at 5 mins), like you can see in my code below. What i'm doing wrong?

代码:

var handler = new HttpClientHandler() { CookieContainer = cookie,
                                        MaxRequestContentBufferSize = 256000000,
                                        UseCookies = true,
};
HttpClient newclient = new HttpClient(handler);

newclient.Timeout = new TimeSpan(0, 10, 0); //That DIDN'T WORK :(

// ALL THE CODE I NEED TO BUILD MY JSON INSIDE jSoNToPost
//....
//....

//convert it to JSON acceptible content
HttpContent formContent = new StringContent(jSoNToPost, Encoding.UTF8, "application/json");

var uri = new Uri(Path.Combine(BaseUrl, "BIG_API_NAME"));

var response1 = await newclient.PostAsync(uri, formContent); // <-- THE EXCEPTION IS THROWN HERE!!!!!

if (response1.IsSuccessStatusCode)
{
    //Other Stuff
    //....
    //....
}
else
{
    //Other Stuff
    //....
    //....
}

环境:

Window 10,Visual Studio 2017,Xamarin IOS和Android.

Window 10, Visual Studio 2017, Xamarin IOS and Android.

EDIT 2019-01-23 14:21:

EDIT 2019-01-23 14:21:

100s超时是默认的HttpClient超时,因此

The 100s timeout is the default HttpClient timeout, so the

newclient.Timeout = new TimeSpan(0, 10, 0);

不覆盖默认值.

我不了解什么是InfiniteTimeSpan,我尝试遵循

I undestand what is InfiniteTimeSpan and i try to follow both the answers in that post. No success :( it Still show the timeout error after 100s.

推荐答案

如果您在环境中使用负载平衡器,请确保检查是否在该级别设置了时间限制.为了安全起见,有些服务器在特定时间后会中断会话.没有代码解决方案:(

If you are using load balancers in your environment, make sure to check if there are time limits set at that level. Some cut off sessions after a certain point as a security measure. No code solution to that :(

这篇关于System.Net.Http.HttpClient不尊重超时,每次使用默认值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆