2012-02-09 12 views
15

Korzystam z interfejsu API usługi WebService ExchangeService (Microsoft.Exchange.WebServices.Data), ale nie mogę znaleźć żadnej metody: Close lub Dispose.Pozbyć się/zamknąć usługę Exchange w języku C#?

Czy nie jest konieczne zamknięcie połączenia w jakiś sposób?

Moja metoda wygląda następująco:

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

Odpowiedz

17

Nie ma blisko/Usuwać metodę na klasie ExchangeService ponieważ klasa nie utrzymuje połączenia do usług internetowych. Zamiast tego nowe połączenie HTTP jest tworzone i zamykane w razie potrzeby.

Na przykład po wywołaniu ExchangeService.FindItems nowe połączenie HTTP z serwerem Exchange jest tworzone i zamykane w ramach wywołania metody na FindItems.

+0

Nadal musisz zamknąć usługi WCF i jest nieprzyjemny błąd z zawijaniem ich w 'użyciu', dlatego pytam. Dziękuję za wyjaśnienie! –

+1

@SimonWoker: Sam się zastanawiałem, w jaki sposób działa klasa ExchangeService w odniesieniu do Close/Dispose, dlatego właśnie w to wrabiam. Zauważ, że EWS nie jest usługą WCF, ponieważ została zaimplementowana "staroświecka" metoda ASMX. –

+0

@JakobChristensen: Kiedy próbujemy połączyć się z EWS (używając tych samych poświadczeń) kilka razy, po 5 razach otrzymujemy błąd odmowy uprawnień. Czy to oznacza, że ​​EWS utrzymuje połączenie przez określony czas i nie zezwala na więcej połączeń? – Naresh

0

Zdaję sobie sprawę, że jest dość stary, ale ostatnio miałem to samo pytanie, ponieważ mieliśmy problem po połączeniu się ze skrzynką pocztową i po raz kolejny spróbowaliśmy tej samej metody, otrzymaliśmy wyjątek HTTP. Następnie, po odczekaniu minuty, możemy połączyć ... ale podobnie jak komentarze na temat zaakceptowanej odpowiedzi, jest to prawdopodobnie ustawienie na serwerze Exchange.

Aby odpowiedzieć na to pytanie, technicznie rzecz biorąc, ponieważ usługa ExchangeService nie implementuje IDisposable, nie ma potrzeby usuwania połączenia ani zawijania instancji w oświadczeniu using.