[英]Dispose/Close ExchangeService in C#?
我正在使用 ExchangeService WebService API ( Microsoft.Exchange.WebServices.Data
),但找不到任何Close
或Dispose
方法。
不需要以某种方式关闭连接吗?
我的方法是这样的:
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.