在C#中处理/关闭ExchangeService
本文关键字:关闭 ExchangeService 处理 | 更新日期: 2023-09-27 18:24:05
我正在使用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;
}
}