获取来自 Exchange 服务器的域设置

了解如何使用自动发现服务从 Exchange 服务器获取域设置。

可以使用自动发现服务检索电子邮件域的配置信息。 自动发现服务为应用程序提供连接到特定域的正确服务终结点的过程。

可以使用以下开发技术之一访问自动发现服务:

  • Exchange Web Services (EWS) 托管 API

  • EWS

    如果使用 EWS,可以使用以下方法来检索用户设置:

    • 基于 SOAP 的自动发现服务

    • XML (POX) 自动发现服务

    • 从 SOAP 或 XML 自动发现服务生成的自动生成的代理

      有关这些方法的详细信息,请参阅 Exchange 的自动发现

EWS 托管 API 提供基于对象的接口来检索用户设置。 如果客户端应用程序使用托管代码,建议使用 EWS 托管 API。 与典型的自动生成的 Web 服务代理相比,EWS 托管 API 接口针对简单对象模型进行了更好的优化。

如果使用 EWS,建议使用 SOAP 自动发现服务,因为它支持比 POX 自动发现服务更丰富的功能集。

自动发现服务仅返回请求的配置设置。 下表列出了自动发现服务可以返回的域配置设置。

表 1:域配置设置

配置设置 说明
ExternalEwsUrl
EWS 的外部 URL。
ExternalEwsVersion
托管 EWS URL 的 Exchange 服务器版本。

获取域设置的先决条件

在创建连接到自动发现服务以获取域设置的应用程序之前,请确保你有权访问以下内容:

  • Exchange Online、Exchange Online作为Office 365的一部分,或运行 Exchange 版本(从 Exchange 2007 开始)的服务器。 如果使用基于 EWS SOAP 的自动发现服务,则为运行 Exchange 版本(从 Exchange 2010 开始)的服务器。

  • 配置为接受来自客户端应用程序的连接的 Exchange 服务器。 有关如何配置 Exchange 服务器的信息,请参阅 在 Exchange 中控制客户端应用程序对 EWS 的访问

  • 有权使用 EWS 的帐户。 有关如何配置帐户的信息,请参阅 在 Exchange 中控制客户端应用程序对 EWS 的访问

注意

如果使用 EWS 托管 API,则必须在某些情况下提供证书验证回调。 可能还需要包含某些生成的代理库的证书验证回调,例如 Visual Studio 创建的代理库。 有关详细信息,请参阅 验证 EWS 托管 API 的服务器证书

获取域设置的核心概念

在使用自动发现获取域设置之前,应熟悉下表中列出的概念。

概念 说明
Exchange 自动发现
概述自动发现服务的工作原理。
使用自动发现查找连接点
介绍自动发现服务用于将客户端应用程序重定向到正确的服务终结点的过程。

如果使用 EWS 托管 API,请使用 Microsoft.Exchange.WebServices.Data 命名空间中的 Microsoft.Exchange.WebServices.Data.ExchangeService 类来管理与 EWS 的连接。 本部分中的代码示例假定你在代码中引用了以下命名空间:

  • System.Net

  • Microsoft.Exchange.WebServices.Data.ExchangeService

使用 EWS 托管 API 获取域设置

如果使用 EWS 托管 API,则可以使用 Microsoft.Exchange.WebServices.Data.AutodiscoverService 对象的Microsoft.Exchange.WebServices.Data.AutodiscoverSettings 方法 生成检索域配置信息的请求,如以下示例所示。 在此示例中,仅请求一些可能的域设置,并且仅从服务器返回请求的设置。

AutodiscoverService autodiscoverService = new AutodiscoverService("domain.contoso.com");
autodiscoverService.Credentials = new NetworkCredential("User1", "password", "domain.contoso.com");
// Submit a request and get the settings. The response contains only the
// settings that are requested, if they exist.
GetDomainSettingsResponse domainresponse = autodiscoverService.GetDomainSettings(
    "domain",
    ExchangeVersion.Exchang2013,
    DomainSettingName.ExternalEwsUrl,
    DomainSettingName.ExternalEwsVersion);

可以分析返回的集合以访问每个键/值对。 以下示例演示如何分析每个返回的元素并显示每个键/值对的名称和值。

// Display each retrieved value. The settings are part of a key/value pair.
foreach (KeyValuePair<DomainSettingName, Object> domainsetting in domainresponse.Settings)
{
    Console.WriteLine(domainsetting.Key.ToString() + ": " + domainsetting.Value.ToString());
}

或者,可以获取特定设置的值。 在以下示例中,将显示 ExternalEwsUrl 设置。

// Display a specific setting, such as ExternalEwsUrl.
Console.WriteLine(domainresponse.Settings[DomainSettingName.ExternalEwsUrl]);

使用 EWS SOAP 自动发现获取用户设置

以下示例演示从自动发现服务获取这两个域设置的 SOAP XML 请求。

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:a="https://schemas.microsoft.com/exchange/2010/Autodiscover" 
        xmlns:wsa="http://www.w3.org/2005/08/addressing" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <a:RequestedServerVersion>Exchange2013</a:RequestedServerVersion>
    <wsa:Action>https://schemas.microsoft.com/exchange/2010/Autodiscover/Autodiscover/GetDomainSettings</wsa:Action>
    <wsa:To>https://autodiscover.exchange.microsoft.com/autodiscover/autodiscover.svc</wsa:To>
  </soap:Header>
  <soap:Body>
    <a:GetDomainSettingsRequestMessage xmlns:a="https://schemas.microsoft.com/exchange/2010/Autodiscover">
      <a:Request>
        <a:Domains>
          <a:Domain>domain</a:Domain>
        </a:Domains>
        <a:RequestedSettings>
          <a:Setting>ExternalEwsUrl</a:Setting>
          <a:Setting>ExternalEwsVersion</a:Setting>
        </a:RequestedSettings>
        <a:RequestedVersion>Exchange2013</a:RequestedVersion>
      </a:Request>
    </a:GetDomainSettingsRequestMessage>
  </soap:Body>
</soap:Envelope>

以下示例显示服务器在分析来自客户端的请求后返回的 XML 响应。

<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/" 
        xmlns:a="http://www.w3.org/2005/08/addressing">
  <s:Header>
    <a:Action s:mustUnderstand="1">https://schemas.microsoft.com/exchange/2010/
          Autodiscover/Autodiscover/GetDomainSettingsResponse</a:Action>
    <h:ServerVersionInfo xmlns:h="https://schemas.microsoft.com/exchange/2010/Autodiscover" 
          xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
      <h:MajorVersion>15</h:MajorVersion>
      <h:MinorVersion>0</h:MinorVersion>
      <h:MajorBuildNumber>160</h:MajorBuildNumber>
      <h:MinorBuildNumber>4</h:MinorBuildNumber>
      <h:Version>Exchange2013</h:Version>
    </h:ServerVersionInfo>
  </s:Header>
  <s:Body>
    <GetDomainSettingsResponseMessage xmlns="https://schemas.microsoft.com/exchange/2010/Autodiscover">
      <Response xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
        <ErrorCode>NoError</ErrorCode>
        <ErrorMessage />
        <DomainResponses>
          <DomainResponse>
            <ErrorCode>NoError</ErrorCode>
            <ErrorMessage>No error.</ErrorMessage>
            <DomainSettingErrors />
            <DomainSettings>
              <DomainSetting i:type="DomainStringSetting">
                <Name>ExternalEwsUrl</Name>
                <Value>https://failover.exchange.microsoft.com/ews/exchange.asmx</Value>
              </DomainSetting>
              <DomainSetting i:type="DomainStringSetting">
                <Name>ExternalEwsVersion</Name>
                <Value>15.00.0085.000</Value>
              </DomainSetting>
            </DomainSettings>
            <RedirectTarget i:nil="true" />
          </DomainResponse>
        </DomainResponses>
      </Response>
    </GetDomainSettingsResponseMessage>
  </s:Body>
</s:Envelope>

后续步骤

域设置提供客户端连接到 EWS 所需的基本信息。 可以使用此信息连接到 EWS,也可以从服务器检索电子邮件帐户的其他配置设置。 有关更多信息,请参阅下面的文章:

另请参阅