2012-02-09 28 views
15

Utilizzo l'API di servizio Web ExchangeService (Microsoft.Exchange.WebServices.Data) ma non riesco a trovare alcun metodo Close o Dispose.Dispose/Close ExchangeService in C#?

Non è necessario chiudere la connessione in qualche modo?

Il mio metodo è simile al seguente:

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

risposta

17

Non c'è Chiudere/metodo Dispose della classe ExchangeService perché la classe non mantiene un collegamento con i servizi web. Invece una nuova connessione HTTP viene creata e chiusa secondo necessità.

Ad esempio, quando si chiama ExchangeService.FindItems una nuova connessione HTTP al server di Exchange viene creata e chiusa all'interno della chiamata del metodo a FindItems.

+0

È ancora necessario chiudere i servizi WCF e c'è un brutto bug con il loro avvolgimento in un "uso", ecco perché lo chiedo. Grazie per la spiegazione! –

+1

@SimonWoker: Mi sono chiesto come funziona la classe ExchangeService rispetto a Close/Dispose ed è per questo che ci sto approfondendo. Si noti che EWS non è un servizio WCF in quanto è stato implementato il modo "vecchio stile" ASMX. –

+0

@JakobChristensen: Quando proviamo a connetterci a EWS (utilizzando le stesse credenziali) più volte, dopo 5 volte riceviamo un errore di autorizzazione negato. Ciò significa che EWS mantiene la connessione per un periodo di tempo definito e non consente ulteriori connessioni? – Naresh

0

Mi rendo conto che questo è piuttosto vecchio, ma ho avuto la stessa domanda di recente, perché abbiamo avuto un problema dopo la connessione a una casella e riprovando lo stesso metodo poco dopo, otteniamo un'eccezione HTTP. Quindi, dopo aver atteso circa un minuto, possiamo connetterci ... ma come i commenti sulla risposta accettata, questa è probabilmente un'impostazione sul server Exchange.

Per rispondere alla domanda, tecnicamente parlando, poiché ExchangeService non implementa IDisposable, non è necessario disporre di una connessione, né è possibile avvolgere un'istanza in un'istruzione using.