2012-02-09 26 views
15

我正在使用ExchangeService WebService API(Microsoft.Exchange.WebServices.Data),但我找不到任何CloseDispose方法。在C#中处理/关闭ExchangeService?

是否需要以某种方式关闭连接?

我的方法是这样的:

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

回答

17

没有关闭/处置的ExchangeService类方法,因为类不保持对Web服务的连接。而是根据需要创建并关闭新的HTTP连接。

例如,当您拨打ExchangeService.FindItems时,将创建一个到Exchange服务器的新HTTP连接,并在方法调用FindItems内关闭。

+0

您仍然需要关闭WCF服务,并且有一个令人讨厌的错误,将它们封装在'using'中,这就是为什么我要问。感谢您的解释! – 2012-02-12 18:10:29

+1

@SimonWoker:我一直在想自己ExchangeService类是如何处理Close/Dispose的,这就是为什么我一直在研究它。请注意,EWS不是WCF服务,因为它已经实现了“老式”ASMX方式。 – 2012-02-12 22:47:40

+0

@JakobChristensen:当我们尝试多次连接到EWS(使用相同的凭据),5次后,我们得到权限拒绝错误。这是否意味着EWS在规定的时间段内保持连接,并且不允许更多的连接? – Naresh 2014-02-27 06:55:03

0

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

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