У меня есть служба Windows, которая прослушивает локальные почтовые ящики Exchange, используя EWS с доступом к олицетворению .
У меня есть один пользователь-администратор (учетная запись службы), который имеет доступ к олицетворению, и я настроил этого пользователя для входа в службу Windows.
Я использую аутентификацию NTLM в C # .Net для входа в систему и олицетворения почтового ящика. Когда я запускаю службу Windows и пытаюсь олицетворять почтовый ящик, я получаю следующую ошибку, хотя у меня есть доступ к олицетворению к моей учетной записи службы.
“Error While initial sync for mailbox SCHEDTEST91@SCHED2010.COM. Exception: Microsoft.Exchange.WebServices.Data.ServiceResponseException: The account does not have permission to impersonate the requested user.
at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.ProcessWebException(WebException webException)
at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.GetEwsHttpWebResponse(IEwsHttpWebRequest request)
at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.ValidateAndEmitRequest(IEwsHttpWebRequest& request)
at Microsoft.Exchange.WebServices.Data.MultiResponseServiceRequest`1.Execute()
at SXA.ES.EWSNotificationListenerService.NotificationListener.NotificationSynchronizerBase.GetCurrentSyncState(String smtpAddress, String autodiscoverUrl)”
Сюрпризом является то, что эта проблема возникает на определенных виртуальных машинах, где размещена моя служба Windows.
У меня всего 4 виртуальных машины и из 4 виртуальных машин служба Windows работает нормально и может выдавать себя за почтовый ящик на 2 виртуальных машинах, но с той же конфигурацией и той же настройкой другие 2 имеют вышеуказанную ошибку.
Вот мой код, который создает OnPremise Exchange Service:
public ExchangeService CreateOnPremiseExchangeService(ExchangeServiceProperties properties)
{
var exchangeService = CreateExchangeService(properties);
exchangeService.UseDefaultCredentials = true;
return exchangeService;
}
private static ExchangeService CreateExchangeService(ExchangeServiceProperties properties)
{
var exchangeService = new ExchangeService(properties.ExchangeVersion)
{
Url = properties.ExchangeUri,
ReturnClientRequestId = true,
SendClientLatencies = true,
UserAgent = properties.UserAgent
};
if (properties.TraceListener != null)
{
exchangeService.TraceListener = properties.TraceListener;
exchangeService.TraceFlags = TraceFlags.All;
exchangeService.TraceEnabled = true;
}
if (!string.IsNullOrWhiteSpace(properties.TargetMailbox))
{
exchangeService.ImpersonatedUserId = new ImpersonatedUserId(
ConnectingIdType.SmtpAddress,
properties.TargetMailbox);
}
return exchangeService;
}
Я много раз пытался найти в Google эту проблему и не смог найти ни одного сообщения.
Мне нужна помощь для решения этой проблемы. Пожалуйста, дайте мне знать, если кто-то сталкивался с той же проблемой во время работы с EWS Service с C # .Net, и есть решение для этого.
Примечание. Если я использую базовую аутентификацию здесь, то она работает нормально и на этих 2 виртуальных машинах, эта проблема возникает только при аутентификации NTLM Windows.