我們通過以下方法訂閱 MS Exchange 2016 的流式通知: service.subscribeToStreamingNotificationsOnAllFolders(EventType.Copied,EventType.Created, EventType.Deleted, EventType.Modified, EventType.Moved, EventType.NewMail); switch (itemEvent.getEventType()) { case Deleted: delete(mailbox, itemEvent.getItemId()); break; case Moved: try { delete(mailbox, itemIdNoChangeKey(itemEvent.getOldItemId())); } finally { create(mailbox, Item.bind(service, itemIdNoChangeKey(itemEvent.getItemId()))); } break; case Modified: update(mailbox, Item.bind(service, itemIdNoChangeKey(itemEvent.getItemId()), itemProp())); break; case Copied: case Created: create(mailbox, Item.bind(service, itemIdNoChangeKey(itemEvent.getItemId()), itemProp())); break; }有時上面的調用會成功,但更常見的是,Items.bind() 會失敗,并顯示以下內容:“訪問被拒絕。檢查憑據并重試。該過程無法獲取正確的屬性。,errorCode='ErrorAccessDenied'”或者“在商店中找不到指定的對象。,進程無法獲取正確的屬性。,errorCode='ErrorItemNotFound'”盡管事實是這樣憑據有效,可以成功用于調用 service.findFolders(WellKnownFolderName.MsgFolderRoot,folderView);我們正在使用 Exchange 模擬。已為所有郵箱分配模擬權限。設置錨郵箱:service.getHttpHeaders().put("X-AnchorMailbox",mailbox);設置 X-PreferServerAffinity:service.getHttpHeaders().put("X-PreferServerAffinity", "true");誰能告訴我們為什么我們會收到 ErrorAccessDenied 和 ErrorItemNotFound 錯誤?是否與 Exchange 系統相關郵件或文件夾的處理有關?我們如何處理這些項目,或者如果不能,如何跳過它們而不會對 Exchange 服務器造成不必要的負載?
1 回答

臨摹微笑
TA貢獻1982條經驗 獲得超2個贊
就我而言,我的代碼模擬了錯誤的郵箱。事實證明,我需要維護一張地圖,如下所示:
private Map<StreamingSubscription, String> reverseSubscriptions = Collections.synchronizedMap(new HashMap<>());
然后在 notificationEventDelegate(..) 方法中...
稱呼
String mailbox = reverseSubscriptions.get(args.getSubscription());
處理項目事件時...
private void processItemEvent(ExchangeService service, String mailbox, ItemEvent itemEvent) throws Exception {
synchronized(service) {
service.setImpersonatedUserId(impersonateAccount(mailbox));
service.getHttpHeaders().put("X-AnchorMailbox", mailbox);
service.getHttpHeaders().put("X-PreferServerAffinity", "true");
try {
...
} catch (Exception ie) {
...
}
}
}
}
添加回答
舉報
0/150
提交
取消