Microsoft Exchange Web Services 1.1 SDK kullanıyorum ve yeni posta bildirimi almak için akış bağlantısını kullanarak kullanıyorum. Tüm bildirimleri almak için iyi çalışıyor, ancak abonelikimi bulamaması Exchange'imle ilgili her seferinde bir hata alıyorum. Aşağıda Akış aboneliğim nereye gidiyor?
aboneliğimi ve kullandığım olayları başlatmak için kullanıyorum kodudur.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()
içinde başka bir abonelik oluşturabilir farkındayım. Birinin, aboneliğin nereye gittiğini anlamamda yardımcı olabileceğini umuyorum. Exchange 2010 gibi bir ürünün aboneliğimi yitireceğini düşünemiyorum. Ayrıca, hatayı işaret edemiyorum. Bazen aboneliğimi 10 dakika boyunca aktif tutabilirim ve diğer zamanlarda 2-3 dakika sonra aboneliğimin geçerli olmamasıyla ilgili bir hata alıyorum.
Bunun için Exchange 2010 SP1 kullanıyorum.
Önerdiğiniz gibi yaptım ve aldığım hata kodu 'ErrorSubscriptionNotFound'. Neden olduğundan emin değilim çünkü 'gönderici' argümanını incelersem orada bir abonelik olduğunu görebilirim. – Mike
Hata kodu, sunucudan gelen hatadır. Aşağı doğru incelediğinizde ve aboneliğin hala orada olduğunu gördüğünüzde, müşterinizdesiniz. Aboneliği bulamayan bir sunucudur. Tahminimce sunucu bir dakika sonra aboneliği iptal etti, çünkü sadece bir dakikalık bir zaman aşımı verdiniz. Daha uzun bir zaman aşımı deneyin ve sorunun hala devam edip etmediğini görün. Niçin kasıtlı olarak bir dakikalık zaman aşımı kullandın? –
Zaman aşımını bir dakikaya ayarladım çünkü 30 dakikalık bir zaman aşımıyla aynı hatayı alıyordum. Hataları bulmak için 30 dakikalık birkaç set beklemek yerine hataları daha hızlı görmek istedim. Ama şimdi bunu düşünüyorum, her zaman aktif bir aboneliği sürdürmemi sağlamak için savunmaya devam etmeliyim. Sunucunun ne zaman bir hıçkırtıracağını asla bilemezsin. Teşekkür ederim. – Mike