Продолжайте получать «Веб-службы Exchange в настоящее время недоступны для этого запроса, потому что» ошибка?

#c# #.net #visual-studio #exchangewebservices

#c# #.net #visual-studio #exchangewebservices

Вопрос:

У нас есть приложение, которое входит в систему как пользователь exchange и выполняет простые задачи, такие как удаление / сохранение / отправка электронных писем и т.д. Я вижу много двух ошибок в нашем отчете Splunk:

«Веб-службы Exchange в настоящее время недоступны для этого запроса, поскольку ни один из серверов клиентского доступа на конечном сайте не смог обработать запрос»

и

«Проблема с удалением электронной почты [идентификатор элемента: (строка идентификатора элемента) ] — указанный объект не найден в хранилище., процессу не удалось получить правильные свойства «.

Я читал, что важно включить: service.HttpHeaders.Add(«X-AnchorMailbox», MailboxToAccess); при олицетворении пользователей и что это может быть проблемой, но как насчет того, когда вы просто входите в систему как пользователь?

Вот код, в котором мы настраиваем службу exchange:

     public ExchangeServiceClient(ILog logger, IContentTypeHelper contentTypeHelper)
    {
        _logger = logger;
        _contentTypeHelper = contentTypeHelper;

        if (EvidenceSettings.Default.AppEmailUserName.Equals("Windows Credentials", StringComparison.OrdinalIgnoreCase))
        {
            _exchangeService = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
            _exchangeService.Url = new Uri(PartnerEvidenceSettings.Default.ExchangeServiceAddress);
        }
        else
        {
            _exchangeService = new ExchangeService(ExchangeVersion.Exchange2013_SP1);
            _exchangeService.Url = new Uri(EvidenceSettings.Default.ExchangeServiceAddress);
            _exchangeService.Credentials = new WebCredentials(EvidenceSettings.Default.AppEmailUserName, EvidenceSettings.Default.AppEmailPassword);
            _exchangeService.TraceEnabled = true;
            _exchangeService.UseDefaultCredentials = false;
        }
    }
  

И вот пример того, когда мы используем службу (только один пример, но все довольно похожие функции):

     public void DeleteMailMessage(string identifier)
    {
        // If this email was an attachment in another email, then only delete the container email
        if (identifier != null)
        {
            try
            {
                var ids = new[] { new ItemId(identifier) };
                var responseCollection = _exchangeService.DeleteItems(ids, DeleteMode.MoveToDeletedItems, null, null);
                foreach (var response in responseCollection)
                {
                    if (response.Result == ServiceResult.Error)
                    {
                        _logger.Error($"Problem deleting email [ item id: {identifier} ] - {response.ErrorMessage}");
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.Error($"Error deleting email [ item id: {identifier} ]", ex);
            }
        }
    }
  

Мой вопрос в том, нужно ли нам включать HTTPHEADERS или что-то еще вызывает эту проблему? Если это не так, я не совсем уверен, что может быть причиной этой ошибки.

Ответ №1:

Эти две ошибки разные и, как правило, не связаны

«Веб-службы Exchange в настоящее время недоступны для этого запроса, поскольку ни один из серверов клиентского доступа на конечном сайте не смог обработать запрос»

Как правило, это ошибка маршрутизации, поэтому да, вы всегда должны включать заголовок X-AnchorMailbox, независимо от того, является ли он олицетворением или нет. (Например, если вы посмотрите на любой почтовый клиент Microsoft Outlook, OWA, Outlook Mobile, вы всегда увидите эти заголовки).

«Проблема с удалением электронной почты [идентификатор элемента: (строка идентификатора элемента) ] — указанный объект не найден в хранилище., процессу не удалось получить правильные свойства «.

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