Hallo Forum,
ich hole mir vom Exchange Server per EWS Termine, die dann (je nach Berechtigung des Benutzers) auch bearbeitet werden sollen.
Voraussetzungen:
Server:
Windows Server 2008 R2 mit IIS7
ASP.NET-Identitätswechsel und Windows-Authentifizierung ist aktiviert
Client:
Windows 7 Professional und IE10 (oder 9)
Web.Config: <authentication mode="Windows"/> <identity impersonate="true"/>
Quellcodeausschnitt:
Nun gibt es drei Zenarien
1: Start aus dem VisualStudio - PC Browser mit URL "localhost...." - alles funktioniert bestens.
2: Ich bin am Server mit meinem Benutzer angemeldet und benutze den Browser vom Server. URL "//meinserver/intranet/..." - geht.
3: Ich benutze den Browser von meinem PC mit URL "//meinserver/intranet/..." und bekomme bei service.GetUserAvailability ein 401 Unauthorized zurück.
Dummerweise ist 3 natürlich das, wie es hinterher laufen soll. Dann habe ich die 3 Zenarien mit
durchgespielt. Funktioniert überall. Dann habe ich mir die EWS Aufrufe protokollieren lassen. Bis auf Zenario 3 sind alle 5 Traces gleich (abgesehen von den Uhrzeiten und der ID).
Die 5 gleichen Traces:
Bei Zenario 3 ist der EWSRequest identisch zu den anderen 5, allerdings bekomme ich dann
und die EWSResponse fehlt dann natürlich.
Ich kann mir das Verhalten nicht erklären und hoffe, dass es einer von Euch kann. Habe ich eine Konfigurationsmöglichkeit übersehen?
PS: Die service.UseDefaultCredentials = False Metode ist nicht die Lösung, denn dann funktioniert es zwar für mich, aber die Kollegen können meine Termine bearbeiten, die Eigenen jedoch nicht.
ich hole mir vom Exchange Server per EWS Termine, die dann (je nach Berechtigung des Benutzers) auch bearbeitet werden sollen.
Voraussetzungen:
Server:
Windows Server 2008 R2 mit IIS7
ASP.NET-Identitätswechsel und Windows-Authentifizierung ist aktiviert
Client:
Windows 7 Professional und IE10 (oder 9)
Web.Config: <authentication mode="Windows"/> <identity impersonate="true"/>
Quellcodeausschnitt:
Code:
Dim service As ExchangeService = New ExchangeService(ExchangeVersion.Exchange2007_SP1) service.Url = New System.Uri("https://meinefirma.de/EWS/Exchange.asmx") service.UseDefaultCredentials = True 'service.UseDefaultCredentials = False 'service.Credentials = New NetworkCredential("ich", "meinPasswort", "meinefirma") service.TraceListener = New TraceListener service.TraceFlags = TraceFlags.All service.TraceEnabled = True Dim attendees As New List(Of AttendeeInfo)() Dim adressen As String() = {"[email protected]", "[email protected]", "[email protected]"} For Each s As String In adressen attendees.Add(s) Next Dim tw As New TimeWindow(New Date(2013, 8, 12), NewDate(2013, 8, 15)) Dim userAvailability As GetUserAvailabilityResults = service.GetUserAvailability(attendees, tw, AvailabilityData.FreeBusy)
1: Start aus dem VisualStudio - PC Browser mit URL "localhost...." - alles funktioniert bestens.
2: Ich bin am Server mit meinem Benutzer angemeldet und benutze den Browser vom Server. URL "//meinserver/intranet/..." - geht.
3: Ich benutze den Browser von meinem PC mit URL "//meinserver/intranet/..." und bekomme bei service.GetUserAvailability ein 401 Unauthorized zurück.
Dummerweise ist 3 natürlich das, wie es hinterher laufen soll. Dann habe ich die 3 Zenarien mit
Code:
service.UseDefaultCredentials = False service.Credentials = New NetworkCredential("ich", "meinPasswort", "meinefirma")
Die 5 gleichen Traces:
Code:
16.08.2013 08:57:42 : EwsRequestHttpHeaders --- <Trace Tag="EwsRequestHttpHeaders" Tid="519" Time="2013-08-16 06:57:42Z"> POST /EWS/Exchange.asmx HTTP/1.1 Content-Type: text/xml; charset=utf-8 Accept: text/xml User-Agent: ExchangeServicesClient/14.03.0032.000 Accept-Encoding: gzip,deflate </Trace> 16.08.2013 08:57:43 : EwsRequest --- <Trace Tag="EwsRequest" Tid="519" Time="2013-08-16 06:57:43Z" Version="14.03.0032.000"> <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header> <t:RequestServerVersion Version="Exchange2007_SP1" /> <t:TimeZoneContext> <t:TimeZoneDefinition Id="W. Europe Standard Time" /> </t:TimeZoneContext> </soap:Header> <soap:Body> <m:GetUserAvailabilityRequest> ..... </m:GetUserAvailabilityRequest> </soap:Body> </soap:Envelope> </Trace> 16.08.2013 08:57:43 : EwsResponseHttpHeaders --- <Trace Tag="EwsResponseHttpHeaders" Tid="519" Time="2013-08-16 06:57:43Z"> 200 OK Content-Length: 158255 Cache-Control: private, max-age=0 Content-Type: text/xml; charset=utf-8 Date: Fri, 16 Aug 2013 06:57:42 GMT Server: Microsoft-IIS/7.0 X-AspNet-Version: 2.0.50727 X-Powered-By: ASP.NET </Trace> 16.08.2013 08:57:43 : EwsResponse --- <Trace Tag="EwsResponse" Tid="519" Time="2013-08-16 06:57:43Z" Version="14.03.0032.000"> <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Header> <t:ServerVersionInfo MajorVersion="8" MinorVersion="3" MajorBuildNumber="298" MinorBuildNumber="1" Version="Exchange2007_SP1" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" /> </soap:Header> <soap:Body> ..... </soap:Body> </soap:Envelope> </Trace>
Bei Zenario 3 ist der EWSRequest identisch zu den anderen 5, allerdings bekomme ich dann
Code:
16.08.2013 08:52:27 : EwsResponseHttpHeaders --- <Trace Tag="EwsResponseHttpHeaders" Tid="48" Time="2013-08-16 06:52:27Z"> 401 Unauthorized Server: Microsoft-IIS/7.0 WWW-Authenticate: Negotiate,NTLM X-Powered-By: ASP.NET Date: Fri, 16 Aug 2013 06:52:26 GMT Content-Length: 0
Ich kann mir das Verhalten nicht erklären und hoffe, dass es einer von Euch kann. Habe ich eine Konfigurationsmöglichkeit übersehen?
PS: Die service.UseDefaultCredentials = False Metode ist nicht die Lösung, denn dann funktioniert es zwar für mich, aber die Kollegen können meine Termine bearbeiten, die Eigenen jedoch nicht.