Azure Webjob:C# - 自动发现服务无法找到错误

时间:2017-05-23 18:55:14

标签: c# web-services azure exchange-server exchangewebservices

我将C#控制台应用程序上传为Azure Webjob。我得到的错误是:

  

未处理的例外情况:   Microsoft.Exchange.WebServices.Data.AutodiscoverLocalException:The   无法找到自动发现服务。

     

at Microsoft.Exchange.WebServices.Autodiscover.AutodiscoverService.InternalGetLegacyUserSettings [TSettings](String   emailAddress,List1 redirectionEmailAddresses,Int32& currentHop)

     

at Microsoft.Exchange.WebServices.Autodiscover.AutodiscoverService.GetLegacyUserSettings [TSettings](String   EMAILADDRESS)

     

at Microsoft.Exchange.WebServices.Autodiscover.AutodiscoverService.InternalGetLegacyUserSettings(String   emailAddress,List`1 requestedSettings)

     

at Microsoft.Exchange.WebServices.Autodiscover.AutodiscoverService.GetUserSettings(String   userSmtpAddress,UserSettingName [] userSettingNames)

     

at Microsoft.Exchange.WebServices.Data.ExchangeService.GetAutodiscoverUrl(String   emailAddress,ExchangeVersion requestedServerVersion,   AutodiscoverRedirectionUrlValidationCallback   validateRedirectionUrlCallback)

     

在   Microsoft.Exchange.WebServices.Data.ExchangeService.AutodiscoverUrl(字符串   emailAddress,AutodiscoverRedirectionUrlValidationCallback   validateRedirectionUrlCallback)

这是我的代码:

private static bool RedirectionUrlValidationCallback(string redirectionUrl)
{
    // The default for the validation callback is to reject the URL.
    bool result = false;

    Uri redirectionUri = new Uri(redirectionUrl);

    // Validate the contents of the redirection URL. In this simple validation
    // callback, the redirection URL is considered valid if it is using HTTPS
    // to encrypt the authentication credentials. 
    if (redirectionUri.Scheme == "https")
    {
        result = true;
    }
    return result;
}
static void Main(string[] args)
{
    ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013_SP1);

    service.Credentials = new WebCredentials("email@mySite.com", "myPassword", "mysite.com");
    service.AutodiscoverUrl("email@mySite.com", RedirectionUrlValidationCallback);

    // More irrelevant code here
}

上面的代码是从这个问题中作为一个接受的答案:Connection to Office 365 by EWS API

在我的机器上作为控制台应用程序运行此代码,运行正常。但这会像网络工作一样错误,任何人都可以提供帮助吗?

1 个答案:

答案 0 :(得分:2)

我使用Office 365帐户测试了您的代码,它在我身边运行良好。我还使用Console.WriteLine打印出返回URL和服务URL。这是我在WebJob仪表板中看到的内容。

[05/24/2017 05:54:52 > 7adbf1: SYS INFO] Run script 'TestO365WebJob.exe' with script host - 'WindowsScriptHost'
[05/24/2017 05:54:52 > 7adbf1: SYS INFO] Status changed to Running
[05/24/2017 05:54:59 > 7adbf1: INFO] return URL: https://autodiscover-s.outlook.com/autodiscover/autodiscover.xml
[05/24/2017 05:55:00 > 7adbf1: INFO] Service URL https://outlook.office365.com/EWS/Exchange.asmx

请仔细检查您的用户名和密码。它们是对的,您的密码是否已过期?

要获取失败原因的详细信息,我们可以在您的Web应用程序“诊断日志”面板上打开“应用程序”日志,并将TraceEnabled属性设置为true。我们可以通过查看应用程序跟踪日志来解决问题。

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013_SP1);
service.TraceEnabled = true;

此外,由于Office365中只有一个EWS端点。我们可以直接设置服务URL,而不是使用自动发现。以下代码供您参考。

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013_SP1);
service.Credentials = new WebCredentials("user@domain.onmicrosoft.com", "password", "domain.onmicrosoft.com");
service.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
相关问题