一段时间后,登录多个用户并使用该应用程序后,对API的调用会失败.有没有办法解决这个问题



我正在对API进行一些呼叫,该API同步并从我的应用程序和邮件议程中保存约会,这是最常见的Outlook邮件。对API的呼叫是由Web应用程序进行的,并且可以工作一段时间,但是几个小时后,呼叫失败了。这持续了一段时间,并在一段时间后开始再次工作。

DefaultConnectionLimit在开始时设置为100,在这种情况下,该过程在一段时间后停止工作(例如30分钟到1小时(。然后,DefaultConnectionLimit设置为20,在这种情况下,它可以正常工作3-4小时,然后停止工作。我不知道这是否是实际原因,但只是提到。

下面提到了从Web应用程序进行API调用的代码:

public bool SyncNewAppToExch(string encryptedAppSyncDetails)
  {
      try
      {
          string result = string.Empty;
          JArray paramList = new JArray();
          paramList.Add(encryptedAppSyncDetails);
          var emailApiUrl = ConfigurationManager.AppSettings["emailApiUrl"].ToString();
          Uri baseAddress = new Uri(emailApiUrl);
          var url = "/api/EmailProcess/ManualSaveAppointments";
          HttpClient client = new HttpClient();
          client.BaseAddress = baseAddress;
          client.DefaultRequestHeaders.Accept.Clear();
          client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
          Task.Run(() => client.PostAsJsonAsync(url, paramList)).Wait(5000);
          var responseMessage = true;
          if (responseMessage)
              return true;
          else
              return false;
      }
      catch (Exception ex)
      {
          return false;
      }
  }

遵循API调用故障的例外读取:

异常:system.AggregateException:发生一个或多个错误。system.threading.tasks.taskCanceLedException:取消任务。---内部异常堆栈跟踪的结尾---在system.threading.tasks.task1.getResultCore(boolean waitcompletionnotification(at system.threading.tasks.tasks.tasks.tasks.taskss.taskss.task1.get_result((

如果您每次要拨打呼叫时都会制作一个新的HTTPCLIENT对象,则您的使用不适当。即使不再使用插座,HTTPClient也可能会继续使用插座,这可能会导致负载下的插座耗尽。您可以在此处看到有关此主题的更多信息

您应该创建一个实例并重复使用。如果您使用的是.NET核心,那么使用HTTPClientFactory是一个更好的主意。

此外,使用task.run调用异步方法是不明智的。您正在为僵局准备自己准备。如果可能的话,将您的方法标记为异步和等待,最好。由于您实际上是在做火和忘记,因此如果您的应用域关闭此工作将丢失,那么您完成此操作的方式。

如果您需要执行此操作,则至少应该考虑以这样的方式注册您的任务:

hostingenvironment.queuebackgroundworkitem(ct => sendmailasync(user.email((;

简短的答案是,很难说出您的问题是什么,这可能是几个问题之一。

相关内容

  • 没有找到相关文章

最新更新