【发布时间】:2014-08-03 20:23:33
【问题描述】:
您好,我编写了一个独立的 Windows 窗体应用程序,它使用 EWS(Exchange Web 服务)托管 API 来侦听特定电子邮件 ID 上的新邮件事件。我正在使用模拟。这是我的代码的一部分:
service = new ExchangeService(SyncSettings.ExchangeServerVersion);
service.Credentials = new WebCredentials(userid, password);
service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, impersonatedUserId);
service.Url = new Uri(exchnguri);
FolderId[] folders=new FolderId[1];
folders[0] = new FolderId(WellKnownFolderName.Inbox);
EventType[] events = new EventType[1];
events[0] = EventType.NewMail;
subscription = service.SubscribeToPushNotifications(folders, new Uri(listenUri), notificationInterval, "", events);
在 Exchange Server 端,我提供了一个用户帐户权限来模拟另一个用户帐户。
当我在一个环境中运行应用程序时,它运行良好。但是当我在另一个中运行它时会出现以下错误:
Immediate Stack Trace
===================================================================================
Microsoft.Exchange.WebServices.Data.ServiceRequestException : The request failed. The remote server returned an error: (401) Unauthorized.
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 Microsoft.Exchange.WebServices.Data.ExchangeService.SubscribeToPushNotifications(IEnumerable`1 folderIds, Uri url, Int32 frequency, String watermark, EventType[] eventTypes)
at com.org.app.Class.startListeningPushNotifications(String listenUri, Int32 notificationInterval) in c:\SW\app\Class.cs:line 156
Inner Exception 1 : Stack Trace
-----------------------------------------------------------------------------
System.Net.WebException . The remote server returned an error: (401) Unauthorized.
at System.Net.HttpWebRequest.GetResponse()
at Microsoft.Exchange.WebServices.Data.EwsHttpWebRequest.Microsoft.Exchange.WebServices.Data.IEwsHttpWebRequest.GetResponse()
at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.GetEwsHttpWebResponse(IEwsHttpWebRequest request)
我在两种环境中观察到的唯一区别是:
在第一个环境中,我使用 domainx\userx 登录 owa (Outlook Web Access),并将邮件发送到自己的帐户(即,我登录的帐户)我将 userx@domainx.com 放入字段
但是在第二种环境中,我使用domainxdc\userx 登录owa(注意domainxdc 中的'dc'),然后将带有userx@domainx.com 的自我邮件发送到字段中。 (注意domainx.com 中没有“dc”)
我认为这不会给我 401 Unauthorized,因为我可以使用模拟帐户和模拟帐户登录 owa。而且我在第二个环境中以与在第一个环境中完全相同的方式赋予模拟特权。
那么为什么我会收到 401 Unauthorized 呢?
我们使用的是 Exchange Server 2007 和 Windows Server 2008 SP2。
【问题讨论】:
标签: windows-server-2008 exchange-server exchangewebservices