我正在通过 EWS API 使用流式通知。在事件处理程序中,我发现一个项目已被修改,但我尝试将修改后的项目绑定(bind)到电子邮件消息失败。报错信息具体是
The item type returned by the service (Appointment) isn't compatible with the requested item type (EmailMessage).
似乎必须有一种方法可以在尝试绑定(bind)之前识别项目类型,但我不确定那是什么。错误发生在尝试 Bind
时,所以我不能简单地检查 null。我可以求助于 try/catch
,但如果有更好的方法,我更愿意正确地执行此操作?
总结代码:
void streamingConnection_OnNotificationEvent(object sender, NotificationEventArgs args)
{
foreach (NotificationEvent notificationEvent in args.Events)
{
ItemEvent itemEvent = notificationEvent as ItemEvent;
if (itemEvent != null) HandleItemEvent(itemEvent);
}
}
private void HandleItemEvent(ItemEvent itemEvent)
{
switch (itemEvent.EventType)
{
case EventType.Modified:
EmailMessage modifiedMessage = EmailMessage.Bind(this.ExchangeService, itemEvent.ItemId);
// error occurs on Bind if the item type is not an EmailMessage (eg, an Appointment)
break;
}
}
最佳答案
看起来正确的绑定(bind)方法是使用通用的 Item.Bind
方法,然后检查项目是否为 EmailMessage
类型。为了稳健地执行此操作(处理项目在绑定(bind)之前移动的潜在问题),我将逻辑放入一个方法中,类似于以下内容:
private EmailMessage BindToEmailMessage(ItemId itemId)
{
try
{
Item item = Item.Bind(this.ExchangeService, itemId);
if (item is EmailMessage) return item as EmailMessage;
else return null;
}
catch
{
return null;
}
}
然后将我现有方法中的逻辑改成
EmailMessage modifiedMessage = BindToEmailMessage(itemEvent.ItemId);
if (modifiedMessage != null) ...
关于c# - 在 Exchange Web 服务 (EWS) 中处理事件时识别项目类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24259082/