2012-02-09 28 views
15

我正在使用ExchangeService WebService API(Microsoft.Exchange.WebServices.Data),但我找不到任何CloseDispose方法。在C#中處理/關閉ExchangeService?

是否需要以某種方式關閉連接?

我的方法是這樣的:

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(); 
    // ... 
} 

回答

17

沒有關閉/處置的ExchangeService類方法,因爲類不保持對Web服務的連接。而是根據需要創建並關閉新的HTTP連接。

例如,當您撥打ExchangeService.FindItems時,將創建一個到Exchange服務器的新HTTP連接,並在方法調用FindItems內關閉。

+0

您仍然需要關閉WCF服務,並且有一個令人討厭的錯誤,將它們封裝在'using'中,這就是爲什麼我要問。感謝您的解釋! – 2012-02-12 18:10:29

+1

@SimonWoker:我一直在想自己ExchangeService類是如何處理Close/Dispose的,這就是爲什麼我一直在研究它。請注意,EWS不是WCF服務,因爲它已經實現了「老式」ASMX方式。 – 2012-02-12 22:47:40

+0

@JakobChristensen:當我們嘗試多次連接到EWS(使用相同的憑據),5次後,我們得到權限拒絕錯誤。這是否意味着EWS在規定的時間段內保持連接,並且不允許更多的連接? – Naresh 2014-02-27 06:55:03

0

我意識到這已經很老了,但最近我有同樣的問題,因爲我們在連接到郵箱後出現問題,並且在不久之後再次嘗試相同的方法,我們得到一個HTTP異常。然後,在等待一分鐘左右後,我們可以連接...但像接受答案上的評論一樣,這可能是Exchange服務器上的一個設置。

爲了回答這個問題,從技術上講,由於ExchangeService不實現IDisposable,因此不需要處理連接,也不需要在using語句中包裝實例。