【问题标题】:401 Unauthorized while ExchangeService.SubscribeToPushNotifications401 未经授权,而 ExchangeService.SubscribeToPushNotifications
【发布时间】: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


    【解决方案1】:

    这里有一些可以尝试的东西——可能会奏效:

    service.CookieContainer = new CookieContainer();
    

    我不太清楚为什么这会有所帮助,就我而言,它与 Exchange Online 相悖,而不是您的本地 E2007。可能有帮助;不能伤害。 There was a blog post on this,但不确定这是否适用于您的情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-06
      • 2018-05-19
      • 2020-06-11
      • 2017-02-22
      • 2018-10-08
      • 2018-01-05
      • 1970-01-01
      相关资源
      最近更新 更多