繁体   English   中英

在 C# 中处理/关闭 ExchangeService?

[英]Dispose/Close ExchangeService in C#?

我正在使用 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();
    // ...
}

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;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM