我有 Windows 服务,它使用EWS 和 Impersonation Access侦听本地 Exchange 邮箱。
我有一个具有模拟访问权限的管理员用户(服务帐户),并且我为我的 Windows 服务登录配置了相同的用户。
我在 C#.Net 中使用 NTLM 身份验证来登录和模拟邮箱。当我启动我的 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 服务的代码:
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;
}
我试着在谷歌上搜索了很多关于这个问题的信息,但找不到任何帖子。
我在这里寻求帮助来解决这个问题。如果有人在使用 C#.Net 使用 EWS 服务时遇到同样的问题,请告诉我,并为此提供解决方案。
注意:如果我在这里使用基本身份验证,那么它在这 2 个虚拟机上也可以正常工作,这个问题仅在 NTLM Windows 身份验证中发生。