2012-02-09 22 views
15

ExchangeService WebService API'sini kullanıyorum (Microsoft.Exchange.WebServices.Data) ancak hiçbir Close veya Dispose yöntemini bulamıyorum.C# içinde ExchangeService/Atama/Kapatma?

Bağlantıyı bir şekilde kapatmak zorunlu değil mi?

Benim yöntemim şöyle görünür:

public void CheckMails() 
{ 
    ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1); 
    IMAPCredentials creds = new IMAPCredentials(); 
    service.Credentials = new NetworkCredential(creds.User, creds.Pass, creds.Domain); 
    service.AutodiscoverUrl(creds.User + "@example.com"); 

    // not the real code from here on but you'll get the idea... 
    // var emails = service.FindItems(); 
    // emails[0].Load(); 
    // emails[0].Attachments[0].Load(); 
    // ... 
} 

cevap

17

sınıf web servislerine bağlantı korumaz çünkü hiçbir Kapat/ExchangeService sınıfına yöntemi imha yoktur. Bunun yerine yeni bir HTTP bağlantısı oluşturuldu ve gerektiğinde kapatıldı.

Örneğin, ExchangeService.FindItems numaralı telefonu aradığınızda, Exchange sunucusuna yeni bir HTTP bağlantısı oluşturulur ve yöntem içinde FindItems numaralı çağrıya kapatılır.

+0

WCF servislerini kapatmanız gerekiyor ve bunları 'kullanma' seçeneğiyle sarmakla ilgili kötü bir hata var, bu yüzden soruyorum. Açıklama için teşekkürler! –

+1

@SimonWoker: ExchangeService sınıfının Close/Dispose ile ilgili olarak nasıl çalıştığını merak ettim, işte bu yüzden kazmaya başladım. EWS'nin "eski moda" ASMX yöntemini uyguladığı için bir WCF servisi olmadığını unutmayın. –

+0

@JakobChristensen: EWS'ye (aynı kimlik bilgilerini kullanarak) birden çok kez bağlanmaya çalıştığımızda, 5 kez sonra izin reddedildi. Bu, EWS'nin tanımlı zaman dilimi için bağlantıyı tuttuğu ve daha fazla bağlantıya izin vermediği anlamına mı geliyor? – Naresh

0

Bunun çok eski olduğunu anlıyorum, ancak son zamanlarda aynı soruyu da yaşadım, çünkü bir posta kutusuna bağlandıktan sonra bir sorun yaşadık ve kısa bir süre sonra aynı yöntemi denedik, bir HTTP istisnası aldık. Ardından, bir dakika bekledikten sonra, bağlantı kurabiliriz ... ama kabul edilen cevaptaki yorumlar gibi, bu muhtemelen Exchange sunucusunda bir ayardır.

ExchangeService, IDisposable uygulanmadığından teknik açıdan soruyu yanıtlamak için, bir bağlantı atmaya gerek yoktur, ayrıca bir örneği using deyimine sarmanıza da gerek kalmaz.