我正在使用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。
sender
参数,我可以看到里面有一个订阅。 - Mike