0

Bonjour J'ai écrit une application Windows Forms autonome qui utilise l'API gérée EWS (Exchange Web Services) pour écouter le nouvel événement de messagerie sur un ID de messagerie particulier. J'utilise l'usurpation d'identité. Ceci est une partie de mon code:401 Non autorisé lors de ExchangeService.SubscribeToPushNotifications

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); 

Sur le côté Exchange Server, j'ai fourni un des privilèges du compte utilisateur pour usurper l'identité d'un autre compte utilisateur.

Lorsque j'exécute l'application dans un environnement, cela fonctionne correctement. Mais quand je le lance dans une autre, il donne l'erreur suivante:

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) 

La seule différence que je remarque dans deux environnements est:

Dans l'environnement d'abord je me connecte owa (Outlook Web Access) à l'aide domainx\userx et à envoyer mail à compte auto (qui est, au compte avec lequel j'ai connecté) je mets [email protected] pour champ

Cependant dans le deuxième environnement je me connecte owa en utilisant domainxdc\userx (avis « dc » en domainxdc) et envoyez moi courrier avec [email protected] dans le champ. (notez pas 'dc' dans domainx.com)

Je ne pense pas que cela me donne 401 non autorisé, puisque je peux me connecter à owa en utilisant à la fois l'emprunt d'identité et le compte emprunté. Et j'ai donné des privilèges d'usurpation d'identité dans le 2ème environnement exactement de la même manière que dans le 1er environnement.

Alors pourquoi je reçois 401 non autorisé?

Nous utilisons Exchange Server 2007 et Windows Server 2008 SP2.

Répondre

0

est ici quelque chose à essayer - pourrait fonctionner:

service.CookieContainer = new CookieContainer(); 

Je ne suis pas très clair sur les raisons de cette aide, et dans mon cas, il allait contre Exchange Online, pas votre sur-prem E2007. Pourrait aider; ne peut pas blesser. There was a blog post on this, mais je ne sais pas si cela s'appliquera à votre cas.

Questions connexes