2013-02-25 44 views
22

我正在使用自动发现服务Url获取指定的电子邮件地址。尝试使用EWS MANAGED API访问Exchange 2010帐户时无法找到“自动发现服务”

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()); 

如果我不喜欢这个,我刚开了一个错误:

The Autodiscover service couldn't be located

我不得不做,以避免这个错误?

回答

27

你有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("[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 
+0

感谢您的答复Alex.I尝试,因为你告诉above.But相同的错误谈到。 – user1891567 2013-02-25 11:38:21

+0

我不知道该说些什么,我在一个新的控制台应用程序中复制粘贴了你的代码,并且在匹配服务器的版本(我们的是2007SP1)和更改凭证之后就可以工作,正如我上面指出的那样。服务器的版本差异可能是相关的,但我无法验证它。 – Alex 2013-02-25 11:41:41

+0

我尝试将版本更改为Exchange2007_SP1,Exchange2010,Exchange2010_SP1,Exchange2010_SP2 ... Thento也出现同样的错误。 – user1891567 2013-02-25 11:58:42

6

尝试使用此:

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

没有这一项

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

通知的用户名是'john''[email protected]',它阻止我了好几个小时,使用第二个.. ..

7

我会推荐你​​启用Traces,以达到以下效果:

 Service.TraceEnabled = true; 

我面临着同样的问题,那么,当我启用的跟踪这些痕迹会引导你到底是什么happening.In我的情况下,SSL证书的问题是有解决这个问题我也跟着下面post

可以有很多问题如:

  • 用户可以被阻止。
  • 的DSN找不到autodiscover.domain.com
+0

谢谢。这帮助我指出了我的情况。 DNS无法解析服务器上的autodiscover.domain.com,而这在我的本地机器上工作。在hosts文件中添加一个条目,将autodiscover.domain.com指向正确的IP地址,并且所有内容都按预期工作。 – user2260040 2015-03-25 20:39:21

+1

要配置跟踪输出的位置,请按照此处的说明https://msdn.microsoft.com/en-us/library/office/dd633676(v=exchg.80).aspx – 2017-09-09 23:50:40

0

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

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

评论的<defaultProxy>标签后,自动发现能够找到服务网址。

13

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

我得到这个错误,事实证明有人在没有通知我的情况下更改了账户的密码!当它只是一个错误的密码时,得到一个奇怪的错误!

+0

谢谢@ user3531993测试它的工作原理。以防万一其他人阅读MSDN文档 - 微软给出了选项,strUsername不是电子邮件,而是用户名,这使我感到困惑,因为它在这里不起作用链接https://msdn.microsoft.com/en-us/library /dn467891(v=exchg.150).aspx – Dung 2016-05-14 14:23:04

+0

感谢您指出此错误也可能发生在不正确的凭据上。为我节省了很多时间! – confusedandamused 2016-10-06 14:30:41

6

为了完整记录:

我们遇到了一个服务突然此特定错误停止。 由于该服务已经无人照管数月,使用EWS监控邮箱,结果证明密码已过期。这引起了自动发现失败,出现同样的异常:

The Autodiscover service couldn't be located

在AD更新Exchange用户的密码,并检查其Password Never Expires产权问题解决了我们。

+1

写得很好,完整。我的也过期了。 – wruckie 2015-11-09 19:38:16

3

检查此电子邮件的密码是否有效。

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

+1

这不提供问题的答案。要批评或要求作者澄清,请在其帖子下方留言。 – 2015-03-24 00:42:19

+0

其实@StephenMuecke这个答案很有帮助 - 原来是我的问题! – kaveman 2015-08-17 17:58:47

0

我已经打了这个,并且一个跟踪显示,在使用代理访问365之后,它启动了SVC记录的DNS查找。 这种查找内部DNS而不是代理,我们的内部DNS不能解析外部DNS条目,这就是我们有代理服务器的原因。 还没有找到为什么它正在做一个DNS查询,而不是使用代理服务器,但这是什么导致我们的版本的这个问题

相关问题