Веб-сервис Exchange, использующий Oauth, выдает ошибку при подписке на ресурс - PullRequest
0 голосов
/ 24 июня 2019

Я использую OAuth2.0 для подключения к веб-сервисам Exchange. Все остальное, кажется, работает нормально для меня. Однако, когда я пытаюсь подписаться на один из ресурсов комнаты, используя информацию о группировке и предоставляя якорный почтовый ящик в качестве одного из основных почтовых ящиков, он выдает ошибку.

"Запрос не выполнен, так как EWS не удалось связаться с соответствующим сервером CAS для этого запроса."

Так, например, я пытаюсь подписаться на nitroom1, и одним из основных почтовых ящиков, связанных с группой, является nitroom2, который я использую в качестве X-AnchorMailbox, тогда я получил вышеуказанную ошибку.

public static ExchangeService GetExchangeService(string exchangeURL, string userName, string password, string resourceEmail, string primaryMailbox, string clientID, string tenantID, string clientSecret, string certName)
    {
        ExchangeService service;
        service = new ExchangeService(setTZtoUTC);
        service.Url = new Uri(exchangeURL);
        if (!string.IsNullOrWhiteSpace(clientID) && !string.IsNullOrWhiteSpace(tenantID))
        {
            string oAuthToken = multiExchangeManager.getOAuthTokenFromCache(clientID, tenantID, clientSecret, certName);
            service.Credentials = new OAuthCredentials(oAuthToken);
        }
        else
        {
            service.Credentials = new WebCredentials(userName, password);
        }
        service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, resourceEmail);
        service.HttpHeaders.Add("X-AnchorMailbox", primaryMailbox);
        service.HttpHeaders.Add("X-PreferServerAffinity", "true");
        return service;
    }

Однако, если я подключаю ews, используя личную учетную запись, тогда делаю то же самое, это работает нормально.

Кроме того, если я использую resourceMailbox так же, как основной почтовый ящик, тогда он также будет работать нормально. В моем примере это будет выглядеть так.

 service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, "nitroom1");
        service.HttpHeaders.Add("X-AnchorMailbox", "nitroom1");

Вот как я пытаюсь использовать подписку.

exchangeService.SubscribeToStreamingNotifications(
                new FolderId[] { WellKnownFolderName.Calendar, WellKnownFolderName.DeletedItems },
                EventType.Created, EventType.Deleted, EventType.Modified, EventType.Moved, EventType.Copied);

Кто-нибудь знает, почему это происходит или что я здесь делаю неправильно?

еще одна вещь, которую нужно добавить, я попробовал инструмент EWSEditor, который предоставляет информацию о подписке, и оба вышеупомянутых ресурса используют одну и ту же информацию о группировке.

1 Ответ

0 голосов
/ 26 июня 2019

Я думаю, что нашел решение этой проблемы, мне просто нужно установить X-BackEndOverRideCookie с любым сервисом, используемым для подписки дочернего почтового ящика.

Для получения дополнительной информации прочитайте эту статью https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-maintain-affinity-between-group-of-subscriptions-and-mailbox-server

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...