c# - 在 Exchange Web 服务 (EWS) 中处理事件时识别项目类型

标签 c# exchangewebservices

我正在通过 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/

相关文章:

c# - 如何使用 Microsoft 的 EWS API 2.0 获取联系人的电子邮件地址?

c# - 在 EWS 中访问房间日历返回 "No mailbox with such guid"

python - EWS TimeZoneDefinitions : For a timezone, 如何计算当前时间的 UTC 偏移量

directory - 如何查找收件箱中是否存在文件夹,如果不存在则创建

c# - 如何在 PostBack 后维护 FileUpload 控件的状态

c# - 自定义字节序列化器

c# - Asp.Net Core 2.0 session 破坏了每个构建

c# - 解析 HTML 节点的正则表达式匹配失败

c# - 尝试在 UWP 中初始化 InkCanvas 数组时内存不足,无法继续执行程序

c# - 我可以使用单个 URL 访问 Exchange online (office365) 吗?