【发布时间】:2018-04-13 20:20:34
【问题描述】:
我正在使用 EWS Exchange Sync,并且在我的一种方法中,它表示我超过了可以在单个请求中删除的 1000 个项目的最大计数。是否可以通过不删除日历中的所有内容来解决这个问题,我们只从今天起删除,而不是及时删除?
导致错误的方法在这里:
public void DeleteAllSafeAppointments(SCDriftConnection conn, ExchangeService service, SAFEAgent agent) {
if(conn == null)
throw new ArgumentNullException("conn");
if(service == null)
throw new ArgumentNullException("service");
if(agent == null)
throw new ArgumentNullException("agent");
try {
var calendar = GetAgentCalendar(service, agent);
service.DeleteItems(GetAllSafeAppointments(calendar).Select(a => a.Id), DeleteMode.HardDelete, SendCancellationsMode.SendToNone, null);
var scheduledActivitiesOnAgent = ScheduledActivity.GetScheduleToExchange(new QueryParameters<ScheduledActivity>(s => s.Initials == agent.Initials && s.ExchangeId != null));
foreach(var schedAct in scheduledActivitiesOnAgent) {
schedAct.ExchangeId = null;
schedAct.Save(conn);
}
ResetAgentSyncState(calendar, agent);
} catch(Exception ex) {
throw new Exception("An error occured while clearing exchange calendar for " + agent.Initials, ex);
}
agent.ExchangeSyncronizationSettings.LastSync = DateTime.Now;
agent.ExchangeSyncronizationSettings.Save(conn);
}
完整的错误信息在这里:
> Safe-Exchange 同步发生错误,版本=1.0.0.0,文化=中性,PublicKeyToken=null
单个请求中可删除的项目数量已超过 1000 个。
已验证 Microsoft.Exchange.WebServices.Data.ServiceRequestBase.ProcessWebException(WebException webException)
已验证 Microsoft.Exchange.WebServices.Data.ServiceRequestBase.GetEwsHttpWebResponse(IEwsHttpWebRequest 请求)
已验证 Microsoft.Exchange.WebServices.Data.ServiceRequestBase.ValidateAndEmitRequest(IEwsHttpWebRequest& 请求)
ved Microsoft.Exchange.WebServices.Data.MultiResponseServiceRequest1.Execute()
ved Microsoft.Exchange.WebServices.Data.ExchangeService.InternalDeleteItems(IEnumerable1 itemIds,DeleteMode deleteMode,Nullable1 sendCancellationsMode, Nullable1 受影响的TaskOccurrences,ServiceErrorHandling errorHandling,布尔型suppressReadReceipts)
已验证 Microsoft.Exchange.WebServices.Data.ExchangeService.DeleteItems(IEnumerable1 itemIds, DeleteMode deleteMode, Nullable1 sendCancellationsMode,Nullable`1 受影响的TaskOccurrences)
ved SafeToExchangeSync.SafeScheduleSyncronizer.DeleteAllSafeAppointments(SCDriftConnection conn,ExchangeService 服务,SAFEAgent 代理)
【问题讨论】:
-
只发出多个请求有什么问题?
-
没什么,但在这个具体的例子中,我不想及时删除,而是想从今天开始删除。
-
为什么不提出这个问题而不是这个错误?简而言之,不,不能通过从今天开始删除所有内容来解决:考虑从今天开始有超过 1000 个项目的情况。
-
嗯,我知道从今天起不会超过 1000 个项目,请说明应该怎么做?除了发出多个请求并因此重写很多。
-
为什么不通过
Deleteitems方法循环 1000 个批次?似乎不需要太多的重写。
标签: c# synchronization exchangewebservices