Linq 从EWS(exchange web服务)服务器读取的电子邮件无法处理此请求错误c#

Linq 从EWS(exchange web服务)服务器读取的电子邮件无法处理此请求错误c#,linq,c#-4.0,exchangewebservices,Linq,C# 4.0,Exchangewebservices,我有一个任务,我需要检查发送到我邮箱的电子邮件并阅读它们,根据主题我必须做一些任务。但出于演示目的,我只提供了更新电子邮件读取状态的基本功能 基本连接和创建服务对象一切正常: /////////// NetworkCredential credentials = new NetworkCredential(securelyStoredEmail, securelyStoredPassword); ExchangeService _service = new ExchangeSe

我有一个任务,我需要检查发送到我邮箱的电子邮件并阅读它们,根据主题我必须做一些任务。但出于演示目的,我只提供了更新电子邮件读取状态的基本功能

基本连接和创建服务对象一切正常:

///////////

    NetworkCredential credentials = new NetworkCredential(securelyStoredEmail, securelyStoredPassword);

    ExchangeService _service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
_service.Credentials = credentials;

    _service.AutodiscoverUrl("User1@contoso.com");
///////////////////////// 这里一切正常。然而,我将使用可观察的反应性linq事件,每60秒调用以下方法。这是去我的邮箱投票,每60秒阅读100封电子邮件。 直到某个时候一切都很好。有时,当控件到达parallel.foreach循环中的代码行时,会显示错误消息,如“服务器现在无法处理此请求”。请稍后再试类似的东西。这个错误正好发生在这条线上

var email = EmailMessage.Bind(_service, findItemsResult.Id, emailProps);
所以每60秒,我就会有这样的错误,有时会很好。 下面是每60秒执行一次的方法。这就好像我每隔60秒就要读一次“myaccount.com”上的电子邮件,我会收到错误“服务器无法处理”

internal void GetEmailsFrommymailbox()
{ 

try
{

var view = new ItemView(100);
var userMailbox = new Mailbox(userMailbox);
var folderId = new FolderId(WellKnownFolderName.Inbox, userMailbox);
SearchFilter sf = new SearchFilter.SearchFilterCollection(LogicalOperator.And,
new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false));



var findResults = _service.FindItems(folderId, sf, view);
var emailProps = new PropertySet(ItemSchema.MimeContent, ItemSchema.Body,
ItemSchema.InternetMessageHeaders);

Parallel.ForEach(findResults, findItemsResult =>
{


///////////// this is the line where i get error////////

    var email = EmailMessage.Bind(_service, findItemsResult.Id, emailProps);

//// above is the place where i get error

var emailMatching = email;
try
{
email.IsRead = true;
email.Update(ConflictResolutionMode.AutoResolve);

}
catch (Exception emailreadFromBccException)
{
Logger.Warn(emailreadFromBccException + " Unable to update email read status");
}


});
}

}

你的错误是因为你被限制,而你的代码不是很有效

而不是做

Parallel.ForEach(findResults,findItemsResult=> {

/////////////这是我出错的地方////////

var email = EmailMessage.Bind(_service, findItemsResult.Id, emailProps);
您应该使用LoadPropertiesFromItems。这将减少您需要呼叫服务器的次数

我还建议您使用流式通知,这意味着您无需每隔60秒轮询服务器,只需在新项目到达时执行操作

干杯 峡谷