c# - 我的流媒体订阅去哪儿了?

标签 c# exchangewebservices exchange-server-2010

我正在使用 Microsoft Exchange Web Services 1.1 SDK 并使用流连接订阅新邮件通知。接收通知一切正常,但我偶尔会收到有关我的 Exchange 无法找到我的订阅的错误消息。

下面是我用来初始化我的订阅和我使用的事件的代码。

public void Subscribe()
{
    var locateMailbox = new Mailbox
                            {
                                Address = "myemail"
                            };
    var folderId = new FolderId(WellKnownFolderName.Inbox, locateMailbox);
    var foldersToWatch = new[] {folderId};
    StreamingSubscription streamingSubscription =
        _exchangeService.SubscribeToStreamingNotifications(foldersToWatch, EventType.NewMail);
    // Timeout is set at 1 minute intentionally
    var streamingConnection = new StreamingSubscriptionConnection(_exchangeService, 1);

    streamingConnection.AddSubscription(streamingSubscription);

    streamingConnection.OnSubscriptionError += ResolveError;
    streamingConnection.OnDisconnect += Reconnect;

    streamingConnection.Open();
}

public void Reconnect(object sender, SubscriptionErrorEventArgs disconnectEventArgs)
{
    if (!((StreamingSubscriptionConnection)sender).IsOpen)
        ((StreamingSubscriptionConnection)sender).Open();
}

public void ResolveError(object sender, SubscriptionErrorEventArgs errorEventArgs)
{
    var streamingSubscriptionConnection =
        (StreamingSubscriptionConnection) sender;
    if (!streamingSubscriptionConnection.IsOpen)
        streamingSubscriptionConnection.Open();
}

ServiceLocalException - 您必须至少向该连接添加一个订阅才能打开它。

该异常不言而喻,我知道我可以简单地在 Reconnect() 中创建另一个订阅。我希望有人能帮助我了解订阅的去向。我无法想象像 Exchange 2010 这样的产品会直接失去我的订阅。另外,我无法指出错误。有时我可以让我的订阅保持活跃状态​​ 10 分钟,而其他时候我会在 2-3 分钟后收到关于我的订阅无效的错误消息。

我使用 Exchange 2010 SP1 的值(value)。

最佳答案

从 Reflector 中的源代码来看,似乎只有两种方法可以删除订阅(除了处理 StreamingSubscriptionConnection 之外,就是调用 Remove,我假设你没有这样做,或通过订阅返回 ServiceError.ErrorMissedNotificationEvents 以外的错误代码。您可以通过查看 ResolveError 中的 errorEventArgs.Exception 来检查错误处理程序。如果它是 ServiceResponseException 的实例,则将其转换为该类型并获取 ErrorCode 属性。触发 OnSubscriptionError 事件后,然后自动删除订阅。

获取错误代码可能会帮助您找出发生这种情况的原因,但即使您无法修复它,您也可以确定何时删除订阅并在这种情况下异步添加另一个订阅。

关于c# - 我的流媒体订阅去哪儿了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5911904/

相关文章:

c# - 如何在 .NET Core 应用程序中使用 .NET Core 类库?

c# - 带有 MarkupExtension 的 IValueConverter

c# - CanBeNull 和 ReSharper - 将它与异步任务一起使用?

exchange-server - EWS API - 重新创建通知订阅时出错

ssl - Javamail、Weblogic、IMAP、SSL 和 Exchange 2010

c# - C#中如何读取文件的特定行

c# - 测试 Exchange Web 服务 API 的最佳策略

c# - EWS 获取邮箱类型(用户/资源/共享)

c# - 如何通过 C# 在 powershell 中传递一个应该为 $null 的参数

exchangewebservices - EWS 托管 API - 如何将项目从一个邮箱复制到另一个邮箱