c# - 由于未处理的异常,该进程被终止。ews 中的 System.Net.HttpWebRequest.GetResponse() 异常
问题描述
大家好,我遇到了这个例外,它正在停止我的服务。请帮助以下是完整的堆栈跟踪。
说明:进程因未处理的异常而终止。异常信息:Microsoft.Exchange.WebServices.Data.EwsHttpWebRequest.Microsoft.Exchange.WebServices.Data.IEwsHttpWebRequest.GetResponse() 的 System.Net.HttpWebRequest.GetResponse() 的 Microsoft.Exchange.WebServices.Data 的 System.Net.WebException .ServiceRequestBase.GetEwsHttpWebResponse(Microsoft.Exchange.WebServices.Data.IEwsHttpWebRequest)
异常信息:Microsoft.Exchange.WebServices.Data.ServiceRequestBase.GetEwsHttpWebResponse(Microsoft.Exchange.WebServices.Data.IEwsHttpWebRequest) 的 Microsoft.Exchange.WebServices.Data.ServiceRequestException (Microsoft.Exchange.WebServices.Data.ServiceRequestBase.ValidateAndEmitRequest) Exchange.WebServices.Data.IEwsHttpWebRequest ByRef) 在 Microsoft.Exchange.WebServices.Data.HangingServiceRequestBase.InternalExecute() 在 Microsoft.Exchange.WebServices.Data.StreamingSubscriptionConnection.Open() 在 ERSupportGetOutlookEmail.EmailExchange.OnDisconnect(System.Object, Microsoft。 Exchange.WebServices.Data.SubscriptionErrorEventArgs) 在 Microsoft.Exchange.WebServices.Data.StreamingSubscriptionConnection.InternalOnDisconnect(System.Exception) 在 Microsoft.Exchange.WebServices.Data.StreamingSubscriptionConnection.OnRequestDisconnect(System.对象,Microsoft.Exchange.WebServices.Data.HangingServiceRequestBase.InternalOnDisconnect(Microsoft.Exchange.WebServices.Data.HangingRequestDisconnectReason, System.Exception) 在 Microsoft.Exchange.WebServices.Data.GetStreamingEventsResponse 的对象,Microsoft.Exchange.WebServices.Data.HangingRequestDisconnectEventArgs。 ReadElementsFromXml(Microsoft.Exchange.WebServices.Data.EwsServiceXmlReader) 在 Microsoft.Exchange.WebServices.Data.ServiceResponse.LoadFromXml(Microsoft.Exchange.WebServices.Data.EwsServiceXmlReader, System.String) 在 Microsoft.Exchange.WebServices.Data.GetStreamingEventsRequest。 Microsoft.Exchange.WebServices.Data.ServiceRequestBase.ReadResponse(Microsoft.Exchange.WebServices.Data.EwsServiceXmlReader) 的 Microsoft.Exchange.WebServices.Data 的 ParseResponse(Microsoft.Exchange.WebServices.Data.EwsServiceXmlReader)。HangingServiceRequestBase.ParseResponses(System.Object) 在 System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(System.Object) 在 System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) 在 System .Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) 在 System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() 在 System.Threading.ThreadPoolWorkQueue.Dispatch( ) 在 System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()ContextCallback, System.Object, Boolean) 在 System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) 在 System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem( ) 在 System.Threading.ThreadPoolWorkQueue.Dispatch() 在 System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()ContextCallback, System.Object, Boolean) 在 System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) 在 System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem( ) 在 System.Threading.ThreadPoolWorkQueue.Dispatch() 在 System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()
这是我的代码,请查看
public async System.Threading.Tasks.Task Watch()
{
//Configuration options for a public client application (desktop/mobile app)
var pcaOptions = new PublicClientApplicationOptions
{
ClientId = ConfigurationManager.AppSettings["appId"],
TenantId = ConfigurationManager.AppSettings["tenantId"]
};
//Creates a PublicClientApplicationBuilder from a clientID.
var pca = PublicClientApplicationBuilder
.CreateWithApplicationOptions(pcaOptions).Build();
//access permission.
var ewsScopes = new string[] { "https://outlook.office.com/EWS.AccessAsUser.All" };
try
{
// Make the interactive token request
var authResult = await pca.AcquireTokenByUsernamePassword(ewsScopes, EmailID, ConvertToSecureString(Password)).ExecuteAsync();
//var authResult = await pca.AcquireTokenInteractive(ewsScopes).ExecuteAsync();
// Configure the ExchangeService with the access token
ewsClient = new ExchangeService();
ewsClient.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
ewsClient.Credentials = new OAuthCredentials(authResult.AccessToken);
Console.WriteLine("New Email details will display below:-");
// Make an EWS call
CreateStreamingSubscription(); //Creating subscription.
}
catch (MsalException ex)
{
Email.onErrorOccur(ex.Message, "EmailExchange Watch event MsalException", ex.StackTrace);
}
catch (Exception ex)
{
Email.onErrorOccur(ex.Message, "EmailExchange Watch event", ex.StackTrace);
}
}
解决方案
在您在 CreateStreamingSubscription 中发布导致异常的代码上,它只是被您发布的代码块捕获,该代码块没有执行任何 Exchange 请求,只是身份验证。您能否提供有关何时发生的更多详细信息,例如代码是否工作了一段时间并且发生了这种情况,或者它只是不起作用?如果它不起作用,可能是 TLS 1.2,所以我建议包括在
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
推荐阅读
- html - 将父文本复制到子文本并删除部分字符串
- sass - SASS - 单击时保持按钮颜色(焦点,活动)
- postgresql - Postgres - 如何使用变量调用函数并从 DBeaver/pgAdmin 返回表/行集
- python - 为什么 PIL 的 Image.fromarray() 会扭曲我的图像颜色?
- python-3.x - 有没有办法使用按钮取消 PyQt5 中的后台工作任务?
- r - “错误:C 堆栈使用 15925652 太接近限制”当 R 中的 View() 数据集时
- reactjs - React 错误:无效的 DOM 属性 `tabindex` 。你的意思是 `tabIndex` 用 Bbootstrap 创建一个模式
- postgresql - 从 PL (PostgreSQL 11) 使用 REST API
- c# - 在 MVC4 上向 DOM 表添加行的问题
- deployment - 如何将 Bitbucket 管道中的 SQL 数据库部署到 Azure