Web服务调用上的随机异常

已加入
2014年6月15日
留言内容
8
编程经验
3-5
大家好,

我有一个在生产环境中可以正常工作的Web服务。
但是有时(随机)会引发异常:
àSystem.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)\ r \ n
àSystem.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)\ r \ n
àSystem.Threading.Tasks.Task`1.get_Result()\ r \ n
àfctSendRequestSynchrone [T](String sRequest,enumHttpMethod eMethod,Object oParams)\ r \ n
àAPI.csRestApi。<SendRequest>d__0`1.MoveNext()"

这是我的代码:
//这是引发异常的行:
C#:
fctSendRequestSynchrone<string>(string.Format("logs/{0}/message", _lIdLog), cs.enumHttpMethod.POST, oLogLigne);
C#:
private T fctSendRequestSynchrone<T>(string sRequest, csRestApi.enumHttpMethod eMethod, object oParams = null)
{
   Task<T> otask = fctSendRequest<T>(sRequest, eMethod, oParams);
   return otask.Result;
}

C#:
public async Task<T> 发送请求<T>(string sAction, enumHttpMethod eMethod, object oParams = null)
{

   string sResponse = string.Empty;
   T oValue;

   using (var oClient = new HttpClient(new LogginHandler(_oCnx, new HttpClientHandler())))
   {
      oClient.DefaultRequestHeaders.Accept.Clear();
      oClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

      string sRequest = string.Concat(_sUrlApi, "/", sAction);

      if (_oToken != null)
      {
         oClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue(_oToken["token_type"], _oToken["access_token"]);
      }

      using (HttpResponseMessage oResponse = await oClient.PostAsJsonAsync(sRequest, oParams))
      {
         if (oResponse.IsSuccessStatusCode)
         {
            HttpContent content = oResponse.Content;
            sResponse = await content.ReadAsStringAsync();
         }
         else
         {
            throw new RestApiException(oResponse);
         }
      }

   }

   oValue = JsonConvert.DeserializeObject<T>(sResponse);

   return oValue;
}

你有好主意吗 ?

提前非常感谢您。

埃里克
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,923
地点
英国
编程经验
10+
我要做的第一件事是尝试在Httpclient上设置更高的超时时间。这只是预感。

我还要为异常处理程序添加一些日志记录。通常,这将告诉您有关该错误的更多信息。

我只看了一眼,但也许其他人可能会看到我忽略的东西。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,499
地点
弗吉尼亚州切萨皮克
编程经验
10+
可能与您的问题没有直接关系,但是值得一读,因为我看到您没有使用HttpClient的Singleton:

 

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,028
地点
挪威
编程经验
10+
可能与您的问题没有直接关系,但是值得一读,因为我看到您没有使用HttpClient的Singleton:
这也清楚地写在文档中:
HttpClient 旨在实例化一次,并在应用程序的整个生命周期内重复使用。为每个请求实例化HttpClient类将耗尽繁重负载下可用的套接字数量。这将导致SocketException错误。
 
最佳 底部