我正在使用 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/