在C#中处理/关闭ExchangeService

本文关键字:关闭 ExchangeService 处理 | 更新日期: 2023-09-27 18:24:05

我正在使用ExchangeService WebService API(Microsoft.Exchange.WebServices.Data),但找不到任何CloseDispose方法。

是否没有必要以某种方式关闭连接

我的方法是这样的:

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

在C#中处理/关闭ExchangeService

ExchangeService类上没有Close/Dispose方法,因为该类不维护与web服务的连接。而是根据需要创建并关闭一个新的HTTP连接。

例如,当您调用ExchangeService.FindItems时,会在对FindItems的方法调用中创建并关闭与Exchange服务器的新HTTP连接。

我意识到这已经很旧了,但我最近遇到了同样的问题,因为我们在连接到邮箱后遇到了问题,不久后再次尝试相同的方法,我们得到了HTTP异常。然后,在等待一分钟左右后,我们可以连接。。。但与已接受答案上的注释一样,这可能是Exchange服务器上的一个设置。

为了回答这个问题,从技术上讲,由于ExchangeService没有实现IDisposable,因此不需要处理连接,也不能将实例封装在using语句中。

private static void ProcessMail()
{
    ExchangeService exchange = new ExchangeService();
    exchange.Credentials = new WebCredentials(sACCOUNT, sPASSWORD, sDOMAIN);
    exchange.AutodiscoverUrl(sEMAIL_ADDRESS);
    if (exchange != null)
    {
        Folder rootFolder = Folder.Bind(exchange, WellKnownFolderName.Inbox);
        rootFolder.Load();
        foreach (Folder folder in rootFolder.FindFolders(new FolderView(100)))
        {
            //your code
        }
        exchange = null;
    }
}