C#间歇性“无法找到自动发现服务”

时间:2016-12-20 16:48:17

标签: c# exchange-server

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

我已经看到很多关于通过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,我也试图检查调试/测试无济于事)。我正在检查四个不同的日历,这个错误可能发生在同一行的任何一个日历上。我无法看到我的代码中出现了什么问题,所以非常令人沮丧。

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

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;
}

正如你所看到的(除了我在学习时对自己发表评论的事实),无论如何,我试图回归真实。它似乎没有改变任何方式。

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

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

1 个答案:

答案 0 :(得分:0)

尝试使用以下格式的Service.Credentials

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

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

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

如果所有其他方法都失败了,我建议您启用Tracing来帮助解决问题。