';自动发现服务无法';无法定位';当尝试使用EWS MANAGED API访问Exchange 20

本文关键字:MANAGED EWS API Exchange 访问 发现 服务 定位 | 更新日期: 2023-09-27 18:01:02

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

ExchangeService Service = new ExchangeService(ExchangeVersion.Exchange2010);
Service.Credentials = new WebCredentials("username@domainname.com", "Password");
Service.AutodiscoverUrl("username@domainname.com");
Folder inbox = Folder.Bind(Service, WellKnownFolderName.Inbox);
Console.WriteLine("The folder name is" + inbox.DisplayName.ToString());

如果我真的喜欢这样,我会遇到一个错误:

无法找到自动发现服务

我该怎么做才能避免这个错误?

';自动发现服务无法';无法定位';当尝试使用EWS MANAGED API访问Exchange 20

如果Service.Credentials出错,请这样使用:

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

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

还要仔细检查以下内容:

  1. 您在new ExchangeService()中指定的版本与服务器的
  2. 传递给Service.AutodiscoverUrl();的参数是正确的(需要获取数据的电子邮件地址)

以下适用于我(在一个新的控制台应用程序中):

// 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("john.smith@mydomain.it");
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是您尝试访问的帐户的电子邮件地址。

我收到了这个错误,结果发现有人在没有通知我的情况下更改了帐户的密码!当它只是一个糟糕的密码时,会出现多么奇怪的错误!

我建议您启用Traces,以实现以下目标:

     Service.TraceEnabled = true;

我当时也面临着同样的问题,当我启用跟踪时,这些跟踪将指导你到底发生了什么。在我的情况下,SSL证书问题可以解决它,我遵循以下后

可能存在许多问题,例如:

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

完整性记录:

我们遇到一个服务突然停止,并出现此特定错误。由于该服务已在无人值守的情况下运行了数月,使用EWS监视邮箱,结果发现密码已过期。这导致AutoDiscovery失败,出现了同样的异常:

无法找到自动发现服务

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

我使用了direct:

Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx")

你可以试着使用Fiddler和eM Client来看看他们是如何使用EWS Managed API来完成任务和复制调用的。

尝试使用此:

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

不是这个

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

注意,用户名是'john'而不是'john@mail.com',它阻止了我使用第二个用户名好几个小时。。。。

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

如果密码已过期,您将从AutoDiscover收到此错误。

我建议您验证自动发现是否确实在DNS中设置。下面的文章详细介绍了如何设置它,还为您提供了有关如何使用Microsoft Remote Connectivity Analyzer进行测试的信息。http://www.petri.co.il/autodiscover-configuration-exchange-2010.htm

针对特定用户面临此问题。经过检查,我发现用户已经启用了双因素身份验证,并使用他的主密码进行连接。通过生成特定于应用程序的密码并与其连接来解决。禁用两个因素也起作用,但需要一些时间来反映。不确定exchange为什么给出"找不到自动发现服务"而不是"未授权"。

我在Exchange 2013中遇到了同样的问题。在我的案例中,原因是配置文件中的默认代理声明,这可能会阻止自动发现服务正常工作。

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

在对<defaultProxy>标记进行注释后,autodiscover能够找到服务Url。

我遇到了这个问题,跟踪显示,在使用代理访问365后,它开始DNS查找SVC记录。此查找将转到内部DNS而不是代理,我们的内部DNS不会解析外部DNS条目,这就是为什么我们有代理服务器的原因。还没有发现为什么它要进行DNS查找而不是使用代理服务器,但这就是导致我们版本的这个问题的原因

"无法找到自动发现服务"错误消息可能与身份验证问题有关,而不是自动发现无法正常工作。

当我刚开始使用EWS托管API时,我遵循了Microsoft的文档,并意识到他们的示例仍在使用基本身份验证。然而,正如你在这篇博客文章中看到的,基本认证应该在2022年底前关闭。因此,您将不得不修改auth部分以使用OAuth 2.0,而不是完全遵循Microsoft的代码示例。这篇文章帮助我把事情做好。

派对迟到。。。但我们也遇到了类似的问题。我们收到了相同的无法找到自动发现服务消息,在检查系统事件日志时,出现了一条错误消息,说明:

The password stored in Credential Manager is invalid.....

错误消息中还包含有关如何更正的说明。即,转到控制面板>凭据管理器,然后重新输入有关帐户的密码。这为我们解决了问题。