您好我编写了一个独立的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(通知&{39; dc'在domainxdc
中),并将userx@domainx.com
的自我邮件发送到字段。 (请注意domainx.com
中没有' dc')
我不认为那是给我401未经授权的,因为我可以使用冒充和冒充帐户登录owa。我在第二环境中以与第一环境完全相同的方式提供了冒充特权。
那么为什么我会获得401 Unauthorized?
我们正在使用Exchange Server 2007和Windows Server 2008 SP2。
答案 0 :(得分:0)
这是尝试的东西 - 可能有效:
service.CookieContainer = new CookieContainer();
我不清楚为什么这会有所帮助,在我的情况下,它反对Exchange Online,而不是你的本地E2007。可能有帮助;不能伤害。 There was a blog post on this,但不确定这是否适用于您的案例。