我正在使用EWS API的流式传输通知。在事件处理程序中,我发现项目已被修改的事实,但我尝试将修改后的项目绑定到电子邮件消息失败。错误消息具体为
服务返回的项目类型(约会)不兼容 使用请求的项目类型(EmailMessage)。
在尝试绑定项目之前,似乎必须有一种方法来识别项目类型,但我不确定那是什么。尝试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;
}
}
答案 0 :(得分:3)
看起来正确的绑定方式是使用通用Item.Bind
方法,然后检查该项是否为EmailMessage
类型。为了做到这一点(处理项目在被绑定之前被移动的潜在问题)我将逻辑放入一个方法,类似于下面:
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) ...