38

我正在为指定的电子邮件地址使用自动发现服务 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());

如果我这样做,我会遇到错误:

找不到自动发现服务

我必须做些什么来避免这个错误?

4

11 回答 11

35

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
于 2013-02-25T11:30:14.237 回答
23

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

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

于 2014-04-15T16:07:17.703 回答
18

我将向您推荐启用 Traces,以实现以下目的:

     Service.TraceEnabled = true;

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

可能有很多问题,例如:

  • 可以阻止用户。
  • DNS 找不到autodiscover.domain.com
于 2013-12-09T15:39:43.727 回答
11

为了完整性的记录:

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

找不到自动发现服务

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

于 2015-01-28T10:39:57.417 回答
8

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

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

于 2015-03-23T18:50:51.010 回答
8

尝试使用这个:

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

不是这个

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

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

于 2013-08-01T07:48:48.050 回答
7

我直接使用过:

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

它对我有用。您可以尝试使用FiddlereM Client来了解它们如何用于EWS Managed API完成任务和复制调用。

于 2018-03-13T11:57:31.313 回答
4

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

于 2013-03-03T02:23:35.653 回答
2

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

于 2019-02-04T06:56:25.093 回答
0

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

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

注释<defaultProxy>标签后,自动发现能够找到服务 URL。

于 2014-03-03T09:19:46.253 回答
0

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

于 2016-03-04T14:10:06.463 回答