2016-04-27 121 views
0

使用Exchange EWS托管API 2.0,这里是我使用的验证凭据其中一个方法:如何验证Exchange凭据登录并使用EWS托管API验证Exchange服务器通信?

public static bool TestExchangeConnetion(UserSettingDTO credential, ServerSettingDTO serverSetting) 
    { 
     bool authenticated = false; 
     Microsoft.Exchange.WebServices.Data.ExchangeService service; 


     service = new ExchangeService((ExchangeVersion)Enum.Parse(typeof(ExchangeVersion), serverSetting.ExchangeVer)); 
     service.Url = new Uri(serverSetting.ExchangeURL); 


     service.Credentials = new NetworkCredential(credential.ExchangeUsername, credential.ExchangePassword); 

     try 
     { 
      //make a call to ensure that credentials are working 
      AlternateIdBase response = service.ConvertId(new AlternateId(IdFormat.EwsId, "Placeholder", credential.ExchangeUsername), IdFormat.EwsId); 
     } 
     // The credentials were authenticated. We expect this exception since we are providing intentional bad data for ConvertId 
     catch (ServiceResponseException) 
     { 
      authenticated = true; 
     } 

     // The credentials were not authenticated. 
     catch (ServiceRequestException) 
     { 
      authenticated = false; 
     } 
     catch (Exception) 
     { 
      authenticated = false; 
     } 

     return authenticated; 
    } 

这工作绝对没来验证凭据,但我在寻找一种方法无效的凭证,区分Exchange服务器停机时间。这两个代码都返回false。 是否有可能找出是否存在问题传送给服务器(如服务器停机)?这样做的原因是我要通知无效的凭证而不是服务器停机的用户!

回答

3

EWS仅仅是对IIS(IIS使正在验证后),如果你只是要检查的凭据,为什么你不只是让对services.wsdl文件或获取Get请求运行的Web服务在CAS服务器上的自动发现端点上。如果credentails不正确,应该返回401。

干杯 格伦

+0

的问题是,你如何服务器停机时间和无效的凭证区分?因为使用我的代码都返回未经授权。 – Ryan

+1

如果你得到一个401那么你的凭据是没有任何好处的,与证书不认为在Exchange你只是验证的条款。定义停机时间?如果CAS是下来,你不会得到响应,如果Maillbox服务器关闭,但CAS是高达你应该得到500错误。如果两台服务器都启动了,但商店没有安装,那么你会得到一个特定的EWS错误。如果您的证书可以在EWS之外进行验证,您需要具体说明。 –

相关问题