C# ';自动发现服务无法';t位于';尝试使用EWS托管API访问Exchange 2010帐户时

C# ';自动发现服务无法';t位于';尝试使用EWS托管API访问Exchange 2010帐户时,c#,exchange-server,exchangewebservices,ews-managed-api,C#,Exchange Server,Exchangewebservices,Ews Managed Api,我正在为指定的电子邮件地址使用自动发现服务Url ExchangeService Service = new ExchangeService(ExchangeVersion.Exchange2010); Service.Credentials = new WebCredentials("username@domainname.com", "Password"); Service.AutodiscoverUrl("username@domainname.com"); Folder inbox =

我正在为指定的电子邮件地址使用自动发现服务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());
如果我这样做,我会出错:

找不到自动发现服务


如何避免此错误?

您得到了
服务。凭据错误,请这样使用:

Service.Credentials = new WebCredentials(username, password, domainname);
使用域凭据,而不是电子邮件地址

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());
同时仔细检查以下各项:

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


    我建议您确认自动发现实际上是在DNS中设置的。下面的文章详细介绍了如何设置它,并提供了有关如何使用Microsoft Remote Connectivity Analyzer测试它的信息。

    尝试使用此选项:

    Service.Credentials = new WebCredentials("john", "12345678", "MYDOMAIN");
    
    不是这个

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

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

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

         Service.TraceEnabled = true;
    
    当我启用跟踪时,我也面临同样的问题,这些跟踪将指导您到底发生了什么

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

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

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

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

    在注释了
    标记后,autodiscover能够找到服务Url。

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


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

    完整性记录:

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

    找不到自动发现服务


    更新AD中Exchange用户的密码并检查其
    密码永不过期
    属性为我们解决了问题。

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


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

    我点击了此按钮,跟踪显示,在使用代理访问365后,它将启动对SVC记录的DNS查找。 此查找转到内部DNS而不是代理,我们的内部DNS不解析外部DNS条目,这就是为什么我们有代理服务器。 还不知道它为什么要进行DNS查找而不是使用代理服务器,但这就是导致我们版本的此问题的原因

    我使用了direct:

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

    这对我很有效。您可以尝试使用并查看他们如何使用EWS托管API来完成任务和复制调用。

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

    谢谢你回复Alex。我按照你上面所说的做了尝试。但也出现了同样的错误。我不知道该说什么,我将你的代码复制粘贴到了一个新的控制台应用程序中,并在匹配服务器版本(我们的版本是2007SP1)和更改凭据后工作,正如我上面指出的那样。服务器的版本差异可能与此相关,但我无法验证。我尝试将版本更改为Exchange2007_SP1、Exchange2010、Exchange2010_SP1、Exchange2010_SP2…然后出现相同的错误。更新了我所有信息的答案。我建议与它联系,让他们首先确保启用了EWS,和/或检查服务器日志(您的请求到达服务器了吗?)如果我这样使用,我将获得我提到的邮箱的所有信息`ExchangeService Service=new ExchangeService(ExchangeVersion.Exchange2010);Service.Credentials=新的WebCredentials(“adminuser1”、“1234567”、“mydomain”);Service.Url=new Uri(“);`这里我已经硬编码了服务器名。如果我使用Autodiscoverurl,我可以在运行时动态提供所有输入。因此我使用Autodiscoverurl而不是Service.Url,`Service.Autodiscoverurl('adminuser@mydomain.com,委托{return true;})“..相同的错误出现在Hanks。这帮助我查明了我的问题。DNS无法在服务器上解析autodiscover.domain.com,而这在我的本地计算机上起作用。在主机文件中添加了一个条目,将autodiscover.domain.com指向正确的IP地址,并且一切正常。要配置跟踪输出的位置,f下面的说明实际上@StephenMuecke这个答案很有帮助-这是我的问题!写得很好,很完整。我的也已经过期了。谢谢@user3531993测试了它的工作原理。为了防止其他人阅读MSDN文档,Microsoft提供了strUsername不是电子邮件而是用户名的选项,这让我很困惑,因为它确实是不工作这里是链接,感谢您指出,这个错误也可能发生在不正确的凭据上。为我节省了一点时间