'尝试通过EWS MANAGED API访问Exchange 2010帐户时找不到自动发现服务

问题描述 投票:31回答:11

我正在使用自动发现服务的URL作为指定的电子邮件地址。

ExchangeService Service = new ExchangeService(ExchangeVersion.Exchange2010);
Service.Credentials = new WebCredentials("[email protected]", "Password");
Service.AutodiscoverUrl("[email protected]");
Folder inbox = Folder.Bind(Service, WellKnownFolderName.Inbox);
Console.WriteLine("The folder name is" + inbox.DisplayName.ToString());

如果我这样做,我会出错:

找不到自动发现服务

为了避免此错误我该怎么办?

c# exchange-server exchangewebservices ews-managed-api
11个回答
32
投票

您错了Service.Credentials,请像这样使用它:

Service.Credentials = new WebCredentials(username, password, domainname);

使用域凭据,而不是电子邮件地址。

还要仔细检查以下内容:

  1. 您在new ExchangeService()中指定的版本与服务器的版本匹配>
  2. 传递给Service.AutodiscoverUrl();的参数正确(需要获取数据的电子邮件地址)
  3. 以下内容对我有用(在新的控制台应用程序中:)>

    // Tweaked to match server version
    ExchangeService Service = new ExchangeService(ExchangeVersion.Exchange2007_SP1); 
    
    // Dummy but realistic credentials provided below
    Service.Credentials = new WebCredentials("john", "12345678", "MYDOMAIN");
    Service.AutodiscoverUrl("[email protected]");
    Folder inbox = Folder.Bind(Service, WellKnownFolderName.Inbox);
    Console.WriteLine("The folder name is " + inbox.DisplayName.ToString());
    
    //Console output follows (IT localized environment, 'Posta in arrivo' = 'Inbox')
    > The folder name is Posta in arrivo
    

让我指出,如果您尝试访问Office 365,则Web凭据实际上是WebCredentials(strUsername,strPassword)的形式;其中strUsername是您要访问的帐户的电子邮件地址。

我收到此错误,结果是有人在未通知我的情况下更改了帐户密码!当它只是一个错误的密码时,会得到一个奇怪的错误!

我将建议您启用跟踪,以实现此目标:

     Service.TraceEnabled = true;

我遇到了同样的问题,那么当我启用跟踪时,这些跟踪将指导您发生了什么。在我的情况下,存在SSL证书问题来解决它,我遵循post

可能有很多问题,例如:

  • 可以阻止用户。
  • DNS找不到autodiscover.domain.com

出于完整性的记录:

我们遇到了因此特定错误而突然停止的服务。由于该服务使用EWS监视邮箱已经无人值守了几个月,结果证明密码已过期。这导致自动发现失败,并带有相同的例外:

找不到自动发现服务

在AD中更新Exchange用户的密码并检查其Password Never Expires属性为我们解决了问题。

尝试使用此:

Service.Credentials = new WebCredentials("john", "12345678", "MYDOMAIN");

不是这个

Service.Credentials = new WebCredentials("[email protected]", "12345678", "MYDOMAIN");

注意,用户名是'john'而不是'[email protected]',使用第二个密码使我受阻了好几个小时。...

检查此电子邮件的密码是否已过期。

如果密码已过期,您将从自动发现收到此错误。

我建议您验证是否在DNS中实际设置了自动发现。下面的文章解释了如何更详细地设置它,还为您提供了有关如何使用Microsoft远程连接分析器对其进行测试的信息。http://www.petri.co.il/autodiscover-configuration-exchange-2010.htm

我使用直接Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx"),它对我有用。您可以尝试使用FiddlereM Client查看它们如何使用EWS Manged API完成工作并复制呼叫。

我在Exchange 2013中遇到了相同的问题。在我的情况下,原因是我的配置文件中存在默认代理声明,这可能导致自动发现服务无法正常工作。

<system.net>
    <defaultProxy enabled="true">
      <proxy proxyaddress="http://localhost:8888" bypassonlocal="False"/>
    </defaultProxy>
</system.net>

注释<defaultProxy>标记后,自动发现能够找到服务网址。

我已经找到了它,并且跟踪显示使用代理访问365后,它将启动SVC记录的DNS查找。此查找转到内部DNS而不是代理,我们的内部DNS不能解析外部DNS条目,这就是为什么我们有代理服务器。尚未发现为什么要进行DNS查找而不是使用代理服务器,但这就是导致此问题的版本的原因

针对特定用户解决了此问题。检查后,我发现用户已启用两因素身份验证并使用其主密码进行连接。通过生成应用专用密码并与其连接来解决。禁用两个因素也可以,但是需要一些时间来反映出来。不知道为什么交换给“找不到自动发现服务”。而不是“未经授权”。


0
投票

我已经找到了它,并且跟踪显示使用代理访问365后,它将启动SVC记录的DNS查找。此查找转到内部DNS而不是代理,我们的内部DNS不能解析外部DNS条目,这就是为什么我们有代理服务器。尚未发现为什么要进行DNS查找而不是使用代理服务器,但这就是导致此问题的版本的原因


0
投票

针对特定用户解决了此问题。检查后,我发现用户已启用两因素身份验证并使用其主密码进行连接。通过生成应用专用密码并与其连接来解决。禁用两个因素也可以,但是需要一些时间来反映出来。不知道为什么交换给“找不到自动发现服务”。而不是“未经授权”。


0
投票

发生此错误...原来我的密码已过期,需要更改。


18
投票

让我指出,如果您尝试访问Office 365,则Web凭据实际上是WebCredentials(strUsername,strPassword)的形式;其中strUsername是您要访问的帐户的电子邮件地址。


12
投票

我将建议您启用跟踪,以实现此目标:


8
投票

出于完整性的记录:


7
投票

尝试使用此:


7
投票

检查此电子邮件的密码是否已过期。


3
投票

我建议您验证是否在DNS中实际设置了自动发现。下面的文章解释了如何更详细地设置它,还为您提供了有关如何使用Microsoft远程连接分析器对其进行测试的信息。http://www.petri.co.il/autodiscover-configuration-exchange-2010.htm


3
投票

我使用直接Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx"),它对我有用。您可以尝试使用FiddlereM Client查看它们如何使用EWS Manged API完成工作并复制呼叫。


0
投票

我在Exchange 2013中遇到了相同的问题。在我的情况下,原因是我的配置文件中存在默认代理声明,这可能导致自动发现服务无法正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.