Używam EWS (2.2.1.0) i muszę czytać e-maile z moją aplikacją, aby zautomatyzować niektóre zadania. Chciałbym wyświetlić komunikat ostrzegawczy, jeśli wprowadzone poświadczenia są nieprawidłowe lub, jeśli brakuje połączenia, po prostu wyświetlić ikonę błędu na pasku stanu.

Muszę rozróżnić, czy poświadczenia użytkownika są nieprawidłowe, czy po prostu brakuje połączenia.
Problem polega na tym, że metoda AutodiscoverUrl() w obu przypadkach zwraca ten sam AutodiscoverLocalException:

Nie można zlokalizować usługi Autodiscover.

To dziwne i nie ma sensu.

Mój kod w następujący sposób:

    try
    {
        exService.TraceEnabled = true;
        exService.Credentials = new WebCredentials(UserSettings.Email.EmailAddress, UserSettings.Email.EmailPassword);
        exService.AutodiscoverUrl(UserSettings.Email.EmailAddress, (string redirectionUrl) => {
            bool result = false;
            Uri redirectionUri = new Uri(redirectionUrl);

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

            return result;
        });
    }
    catch(Exception ex)
    {
        Thread.Sleep(ApplicationSettings.General.WaitForNextConnectionRetry);
    }

Czy ktoś może mi wyjaśnić, jak sprawdzić, czy poświadczenia użytkownika są nieprawidłowe lub usługa jest po prostu nieosiągalna?

Z góry dziękuję

1
bacca87 6 listopad 2018, 18:19

1 odpowiedź

Najlepsza odpowiedź

Link do próbki testowej: Rozpocznij pracę z aplikacjami klienckimi EWS Managed API

Myślę, że nie ma dobrego sposobu na odróżnienie poświadczeń użytkownika lub Uri. Dla mnie wystarczy dodać "spróbuj złapać", aby wykryć błąd. Ponadto przetestowałem przykładowy kod powyżej i podałem zły kod. Następnie wystąpił błąd w wierszu service.AutodiscoverUrl. Zobacz komunikat śledzenia:

enter image description here

A może możemy otrzymać wiadomość Trace, aby to wykryć.

1
Simon Li 7 listopad 2018, 05:50