2012-02-09 45 views
15

Tôi đang sử dụng API WebService ExchangeService (Microsoft.Exchange.WebServices.Data) nhưng tôi không thể tìm thấy bất kỳ phương thức Close hoặc Dispose nào.Vứt bỏ/Đóng ExchangeService trong C#?

Không cần thiết phải đóng kết nối bằng cách nào đó?

Phương pháp của tôi trông như thế này:

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

Trả lời

17

Không có Đóng/Vứt bỏ phương pháp trên lớp ExchangeService vì lớp không duy trì một kết nối đến các dịch vụ web. Thay vào đó, kết nối HTTP mới được tạo và đóng khi cần.

Ví dụ khi bạn gọi ExchangeService.FindItems kết nối HTTP mới đến máy chủ Exchange được tạo và đóng trong cuộc gọi phương thức đến FindItems.

+0

Bạn vẫn cần phải đóng các dịch vụ WCF và có một lỗi khó chịu khi gói chúng trong một 'sử dụng', đó là lý do tôi hỏi. Cảm ơn lời giải thích! –

+1

@SimonWoker: Tôi đã tự hỏi bản thân mình như thế nào lớp ExchangeService hoạt động liên quan đến Đóng/Vứt bỏ vì vậy đó là lý do tại sao tôi đã được đào sâu vào nó. Lưu ý rằng EWS không phải là dịch vụ WCF vì nó đã được triển khai theo cách ASMX "cũ kỹ". –

+0

@JakobChristensen: Khi chúng tôi cố gắng kết nối với EWS (sử dụng cùng một thông tin xác thực) nhiều lần, sau 5 lần chúng tôi nhận được sự cho phép bị từ chối lỗi. Điều đó có nghĩa là, EWS giữ kết nối trong khoảng thời gian xác định và không cho phép bất kỳ kết nối nào khác? – Naresh

0

Tôi nhận thấy rằng điều này khá cũ, nhưng gần đây tôi đã có câu hỏi tương tự, vì chúng tôi gặp sự cố sau khi kết nối với hộp thư và thử lại cùng một phương thức ngay sau đó, chúng tôi nhận được ngoại lệ HTTP. Sau đó, sau khi chờ một phút hoặc lâu hơn, chúng tôi có thể kết nối ... nhưng giống như các nhận xét về câu trả lời được chấp nhận, đây có thể là cài đặt trên máy chủ Exchange.

Để trả lời câu hỏi, về mặt kỹ thuật, vì ExchangeService không triển khai IDisposable, nên không cần phải hủy kết nối, bạn cũng không thể bao bọc một trường hợp trong câu lệnh using.

Các vấn đề liên quan