【问题标题】:C# intermittent "The Autodiscover service couldn't be located"C# 间歇性“找不到自动发现服务”
【发布时间】:2017-05-05 23:10:11
【问题描述】:

长期潜伏者,第一次海报。

我已经看到很多关于通过 Exchange2010 进行模拟的问题(我正在这样做),但到目前为止我所看到的一切都与无效的代码语法或无效的密码有关。希望有人可以帮助我解决我的问题,这有点奇怪。我只是想发一封电子邮件,从同一域的另一个日历中获取约会,然后发送列出这些约会的电子邮件。

我的代码可以运行,但偶尔会出现以下错误:

An unhandled exception of type 'Microsoft.Exchange.WebServices.Data.AutodiscoverLocalException' occurred in Microsoft.Exchange.WebServices.dll
Additional information: The Autodiscover service couldn't be located.

我故意从代码中删除了任何错误检查,并让它在运行时崩溃。如果我立即再试一次,它可能会也可能不会奏效。如果它在五分钟内再试一次,同样的故事。大约 75% 的时间它在第一次运行时工作,对于我的生活,我无法弄清楚我做错了什么(错误指向 RedirectionUrlValidationCallback,我也尝试检查调试/test 无济于事)。我正在检查四个不同的日历,并且同一行中的任何一个都可能发生此错误。我看不出我的代码有什么问题,所以真的很沮丧。

首先我初始化一些东西来准备要发送的电子邮件:

using Microsoft.Exchange.WebServices.Data;

const int NUM_APPTS = 10;
ExchangeService serviceAuth = new ExchangeService(ExchangeVersion.Exchange2010);
serviceAuth.Credentials = new WebCredentials("me@mydomain.com", "PASSHERE");
serviceAuth.AutodiscoverUrl("me@mydomain.com", RedirectionUrlValidationCallback);

我发送电子邮件等,然后我去查看日历并尝试查看条目:

ExchangeService serviceCALONE = new ExchangeService(ExchangeVersion.Exchange2010);
serviceCALONE.Credentials = new WebCredentials("CALONE@mydomain.com", "PASSHERE");
serviceCALONE.AutodiscoverUrl("CALONE@mydomain.com", RedirectionUrlValidationCallback);
CalendarFolder calendarCALONE = CalendarFolder.Bind(serviceCALONE, WellKnownFolderName.Calendar, new PropertySet());
CalendarView cViewCALONE = new CalendarView(startDate, endDate, NUM_APPTS);
cViewCALONE.PropertySet = new PropertySet(AppointmentSchema.Subject, AppointmentSchema.Start, AppointmentSchema.End);
FindItemsResults<Appointment> appointmentsCALONE = calendarCALONE.FindAppointments(cViewCALONE);

这是我在 MSDN 其他地方使用的 RedirectionURLValidationCallback 函数:

private static bool RedirectionUrlValidationCallback(string redirectionUrl)
{
    // The default for the validation callback is to reject the URL.
    bool result = true;
    // This was changed to default to true because an error started appearing with:
    // "The autodiscover service could not be located"

    Uri redirectionUri = new Uri(redirectionUrl);

    if (redirectionUri.Scheme == "https")
    {
        result = true;
    }
    return result;
}

如您所见(除了我在学习时对自己发表大量评论的事实),无论如何我都试图返回 true。无论哪种方式,它似乎都没有改变任何东西。

错误可能发生在电子邮件初始化或日历检查期间,但两次 iirc 都在 .AutodiscoverUrl 行。我正在通过 Rackspace 托管的测试盒运行它,如果这很重要的话。

非常感谢任何帮助,谢谢!

【问题讨论】:

    标签: c# exchange-server


    【解决方案1】:

    尝试以这种格式使用Service.Credentials

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

    另外,请检查电子邮件地址的密码是否已过期。 如果密码已过期,您将从自动发现中收到此错误。

    在外部测试 Autodiscover 的另一个故障排除选项是使用 Microsoft Remote Connectivity Analyser

    如果一切都失败了,我建议启用Tracing 来帮助解决问题。

    【讨论】:

    • 我已经尝试过以这种方式格式化的服务凭证。它实际上对我来说是错误的。我认为这与 2010 年与最初的用途有关(我在另一个线程上看到它)。我已经尝试将用户作为用户和用户@域(即使我知道用户@域不应该工作)。就像我在问题中所说的那样,密码没有过期,因为它有时会起作用,有时会立即不起作用。但是,由于我也在此处阅读了该内容,因此我在大约一周前为所有相关帐户重置了密码,但无济于事。
    • 我会尝试追踪方法,因为我还没有尝试过它的内容。
    • 加入听众并不能告诉我太多。我完全按照 MSDN 文章所说的方式完成了它,它给了我最后一个成功的 EWS 请求。调试输出:Microsoft.Exchange.WebServices.dll 中出现“Microsoft.Exchange.WebServices.Data.AutodiscoverLocalException”类型的第一次机会异常 Microsoft 中出现“Microsoft.Exchange.WebServices.Data.AutodiscoverLocalException”类型的未处理异常。 Exchange.WebServices.dll 附加信息:找不到自动发现服务。这次第一次成功,第二次没有。
    • 您是否尝试过替换自动发现并直接使用服务器 url? service.Url = new Uri("https://yourserver/ews/exchange.asmx"); 要检查的另一件事是您的服务器上是否存在 SSL 证书问题(例如,可能是过期或无效的证书)。 IIS 日志还可以为您提供一些有用的信息。
    • 我会要求 Rackspace 检查他们的 IIS 日志。由于 Rackspace 使用该 emailsrvr url 进行自动发现,我真的不认为尝试指向一个静态位置对我有很大帮助。由于电子邮件工作正常(并且程序本身在有和没有上述 UrlCallback 的情况下执行,65% 的时间默认为真假),我要说这也不是问题。不过,我确实很感激到目前为止的帮助。我得到的所有这些回复都是(大部分)我也想到过的,但最终没有解决任何问题。
    猜你喜欢
    • 2012-09-28
    • 1970-01-01
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    相关资源
    最近更新 更多