【问题标题】:How to validate Exchange credentials and verify Exchange server communication using EWS managed API?如何使用 EWS 托管 API 验证 Exchange 凭据并验证 Exchange 服务器通信?
【发布时间】:2026-02-02 10:50:01
【问题描述】:

使用 Exchange EWS 托管 API 2.0,这是我用来验证凭据的方法:

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。 是否可以查明与服务器通信是否存在问题(如服务器停机时间)?这样做的原因是我想通知用户无效凭据而不是服务器停机时间!

【问题讨论】:

    标签: c# exchangewebservices ews-managed-api


    【解决方案1】:

    EWS 只是一个在 IIS 上运行的 Web 服务(因此 IIS 负责身份验证)如果您只想检查凭据为什么不针对 services.wsdl 文件发出 Get 请求或 Get on CAS 服务器上的自动发现端点。如果凭据不正确,则此时应返回 401。

    干杯 格伦

    【讨论】:

    • 问题是如何区分服务器停机时间和无效凭据?因为使用我的代码都返回未授权。
    • 如果您收到 401,那么您的凭据就没有任何好处,不要考虑您只是在进行身份验证的 Exchange。定义停机时间 ?如果 CAS 已关闭,您将不会收到响应,如果邮箱服务器已关闭但 CAS 已启动,您应该收到 500 错误。如果两台服务器都已启动但未安装存储,那么您将收到特定的 EWS 错误。您需要真正具体说明它是否只是您可以在 EWS 之外验证它们的凭据。