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