我正在使用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 - You must add at least one subscription to this connection before it can be opened.
这个例外是有目共睹的,我知道,我可以简单地创建的Reconnect()
内其他订阅。我希望有人能帮我理解订阅的去向。我无法想象像Exchange 2010这样的产品会简单地失去我的订阅。另外,我不能指出错误。有时我可以保持我的订阅活动时间为10分钟,而其他时间我收到有关我的订阅在2-3分钟后无效的错误。
对于我使用Exchange 2010 SP1的价值。
我照你的建议做了,我得到的错误代码是'ErrorSubscriptionNotFound'。不知道为什么,因为如果我深入了解'发送者'参数,我可以看到那里有订阅。 – Mike 2011-05-09 11:56:17
错误代码是来自服务器的错误。当您深入查看订阅仍在时,您就在客户端上。它是无法找到订阅的服务器。我的猜测是服务器在一分钟左右就放弃了订阅,因为你只给了一分钟的超时时间。尝试更长的超时时间并查看问题是否仍然存在。为什么你故意使用一分钟超时? – 2011-05-09 13:20:29
我将超时设置为一分钟,因为我收到了30分钟超时的相同错误。与其等待几组30分钟找到错误,我想更快地查看错误。但现在我想到了这一点,我仍然应该在防守方面编码,以确保我始终保持积极的订阅。你永远不知道服务器何时会发生呃逆。谢谢。 – Mike 2011-05-09 13:24:47