2

Je télécharge une application console C# en tant que Webjob Azure. L'erreur que je reçois est:Azure Webjob: C# - Impossible de localiser le service de découverte automatique

Exception non gérée: Microsoft.Exchange.WebServices.Data.AutodiscoverLocalException: Le service de découverte automatique ne pouvait pas se trouver.

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

à Microsoft.Exchange.WebServices.Autodiscover.AutodiscoverService.GetLegacyUserSettings [TSettings] (String emailAddress)

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

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

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

à Microsoft.Exchange.WebServices.Data.ExchangeService.AutodiscoverUrl (String emailAddress, AutodiscoverRedirectionUrlValidationCallback validateRedirectionUrlCallback)

Voici mon code:

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 protected]", "myPassword", "mysite.com"); 
    service.AutodiscoverUrl("[email protected]", RedirectionUrlValidationCallback); 

    // More irrelevant code here 
} 

Le code ci-dessus était pris de cette question comme Acceptée Réponse: Connection to Office 365 by EWS API

L'exécution de ce code sur ma machine comme une application de la console, exécute ça va. Mais cette erreur en tant que webjob, quelqu'un peut-il aider?

+0

j'ai eu des problèmes à l'aide de SAP sur Azure et après la chasse pour trouver des réponses finalement juste décidé de lancer l'application de la console sur un serveur local à la place et utiliser le Planificateur de tâches pour le faire fonctionner sur un calendrier établi – hellyale

+0

@hellyale je espère pouvoir diagnostiquer le problème, mais malheureusement, je n'ai pas le confort de recourir à un serveur local pour la procédure. :( – NoReceipt4Panda

Répondre

2

J'ai testé votre code avec mon compte Office 365, il a bien fonctionné de mon côté. J'utilise également Console.WriteLine pour imprimer l'URL de retour et l'URL du service. Voici ce que je vois dans le tableau de bord 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 

Veuillez vérifier votre nom d'utilisateur et votre mot de passe. Ont-ils raison et votre mot de passe a expiré? Pour obtenir des informations détaillées sur les raisons de l'échec, nous pouvons activer le journal des applications dans le panneau des journaux de diagnostic de votre application Web et définir la propriété TraceEnabled sur true. Nous pouvons avoir ce qui n'allait pas en regardant les journaux de trace de l'application.

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

De plus, il n'existe qu'un seul point de terminaison EWS dans Office365. Nous pouvons définir directement l'URL du service au lieu d'utiliser la fonction de découverte automatique. Le code ci-dessous est pour votre référence.

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013_SP1); 
service.Credentials = new WebCredentials("[email protected]", "password", "domain.onmicrosoft.com"); 
service.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx"); 
+0

L'utilisation de l'URL du service a directement fonctionné comme un charme! On dirait que AutoDiscover ralentissait aussi ce processus, puisque ce processus d'URL direct est plus rapide. – NoReceipt4Panda