Exchange Web Services (EWS)
Früher war MAPI/CDO der bevorzugte Weg, um an die Inhalte eines Exchange Servers (Postfach und öffentliche Ordner) zu kommen. Allerdings hat dieser Weg in der modernen Zeit diverse Einschränkungen. Als 16/32bit Applikation bzw. COM-DLL ist der Weg in die Zukunft nicht einfach. Zudem erfolgt die Kommunikation per RPC gegen den Postfachserver. HTTPS wäre aber viel besser. Mit Exchange 2000/2003 gab es einen Zwischenschritt, da über das Protokoll WebDAV ein Zugriff auf Inhalte per HTTPS möglich wurde. Besonders elegant war dies aber auch nicht und mit Exchange 2007 wurden erstmals die Webservices bereit gestellt, welche zukünftig alle anderen APIs (WebDAV, CDO, ExOLEDB und OWA Url Commmands) ersetzen sollen. Mit Exchange 2010 wurden dann eine ManagedAPI für .NET bereit gestellt, dass Entwickler sehr viel einfacher arbeiten können.
Funktionsumfang
Was sie mit Webservices heute schon abdecken können, zeigt ein Diagramm. Sie zeigt sehr gut, welche Funktionen schon in Exchange 2007 enthalten waren und dass Exchange 2007 SP1 den Exchange 2007 Funktionsumfang quasi komplettiert hat. Natürlich wurden die Webservices mit Exchange 2010 nochmal erweitert.

Quelle: TechEd UNC324 What's New in Exchange Web Services in Microsoft
Exchange Server 2010, Autor Albert Kooiman
Das Ernsthaftigkeit zum Einsatz von Exchange Web Services von Microsoft ist klar und deutlich: Sehr viele Produkte und Programme setzen mittlerweile auf EWS auf z.B. Entourage für Mac Web Service Edition, die TransporterSuite, Project Server 2010 für Aufgaben und immer mehr andere Tools von Microsoft und Drittherstellern. Die eigenständige Seite Webservice liefert eine allgemeine Beschreibung.
Über die Exchange Web Services ist daher ein einfacher, internettauglicher, Plattformunabhängiger Zugriff auf Inhalte möglich. Per Webservice kann sich ihr Programm sogar informieren lassen, wenn sich in einem Ordner etwas ändert. Allerdings funktioniert das nur Asynchron und nur pro Ordner. Es ist daher kein Ersatz für die Storesinks von Exchange 2000/2003. Allerdings kann man über die SynchronizationAPI Änderungen sehr einfach ermitteln und darauf reagieren.
Exchange Web Services nutzen
Ehe es von Microsoft die "Managed API" zu den Exchange WebServices gab, muss man sich noch selbst die WSDL-Datei besorgen und sich Proxy-Klassen schreiben und sehr genau prüfen, welche Parameter an welcher Stelle eingesetzt werden sollen. All Links zum Einsatz ohne Managed API habe ich mittlerweile an das Ende der Seite verschoben. (Siehe Exchange 2007 Webservices ohne Managed API). Sie sind immer noch wichtig, wenn Sie mit Programmen auf Exchange zugreifen wollen, die nicht .NET unterstützen, z.B. Java, Unix etc. Ansonsten würde ich speziell für Einsteiger stickt dazu raten, die Managed API zu nutzen.
Die sind aber erst mal herunter zu laden und auf dem Client zu installieren, damit Sie diese auch nutzen können.
Exchange Web Services Managed API 1.0 (ca. 700kb)
http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=c3342fb3-fbcc-4127-becf-872c746840e1
Die Installation muss auf den System erfolgen, von dem aus der Zugriff auf die Daten erfolgen soll. Es ist nicht mehr erforderlich, eine Anwendung oder zusätzliche API auf dem Exchange Server zu installieren.

Nach Abschluss der Installation gibt es aber kein Icon im Startmenü o.ä. Sie können dann in ihrem Projekt einfach die neuen DLLs einbinden und dann basierend darauf eine neue Instanz eines Objekts zu erstellen und für Diagnosezwecke das Tracing zu aktivieren.
using Microsoft.Exchange.WebSerivces.Data;
using Microsoft.Exchange.WebSerivces.Autodiscover;
/* ewsserver initialisieren */
ExchangeService ewsservice= new ExchangeService;
/* ewsserver initialisieren wenn Ziel Exchange 2007 ist*/
ExchangeService ewsservice= new ExchangeService(Exchange2007_SP1);
/* Optional Credentials angeben */
ewsservice.Credentials = new NetworkCredential("name", "pwd", "domain");
/* bei Bedarf ein trace einschalten */
ewsservice.traceEnabled = true;
/* URL definieren ODER per Autodiscover ermitteln */
service.Url = new Uri("https://servername/EWS/Exchange.asmx");
service.AutodiscoverUrl("mailadresse@domain.tld");
- Introducing the Exchange Web Services Managed API 1.0
http://msdn.microsoft.com/en-us/library/dd637749.aspx - Exchange Server Developer Center
http://msdn.microsoft.com/en-us/exchange/default.aspx - Exchange Developer Blog
http://msdn.microsoft.com/blogs/exchangedev - Exchange API-spotting - Introducing the EWS Managed API!
http://blogs.msdn.com/exchangedev/archive/2009/04/15/introducing-the-ews-managed-api.aspx - Exchange Web Services Managed API: Unified Communications
Development for Exchange
http://channel9.msdn.com/pdc2008/BB46/ - Exchange API-spotting
http://blogs.msdn.com/exchangedev/archive/2008/05/22/exchange-developer-roadmap.aspx - Exchange Web Services - What You Didn't Know
http://msexchangeteam.com/archive/2009/03/24/450892.aspx- EWS is Only API for next Exchange Version
- Vista and MAC Gadgets as samples using EWS
- MAC Entourage uses EWS only
- Android uses EWS for Contacts
- Managed API with next version of Exchange
- Glen Scales: Managed API Artikel
http://gsexdev.blogspot.com/search/label/EWS%20Managed%20API - Writing a simple scripted process to download attachmentts in
Exchange 2007/ 2010 using the EWS Managed API
http://gsexdev.blogspot.com/2010/01/writing-simple-scripted-process-to.html - Processing items in an Exchange folder using EWS Managed API
http://www.infinitec.de/post/2009/06/07/Processing-items-in-an-Exchange-folder-using-EWS-Managed-API.aspx -
6 teilige Webcast Serie
http://blogs.msdn.com/exchangedev/archive/2009/10/08/don-t-miss-the-exchange-2010-developer-webcasts.aspx
Hier die direkten Links zum Download
Exchange Server 2010 Development (Part 1 of 6): Migrating Applications to Exchange Web Services
Exchange Server 2010 Development (Part 2 of 6): A Deep Dive into Using Autodiscover Service in Exchange Web Services
Exchange Server 2010 Development (Part 3 of 6): A Deep Dive into Impersonation and Delegation in Exchange Web Services
Exchange Server 2010 Development (Part 4 of 6): A Deep Dive into Exchange Web Services Notifications (Push/Pull)
Exchange Server 2010 Development (Part 5 of 6): A Deep Dive into the Exchange Web Services Managed API
Exchange Server 2010 Development (Part 6 of 6): Best Practices for Building Scalable Exchange Server Applications -
EWSEditor
Zugriff auf Postfachinhalte per Exchange Web Services -
Programming With Exchange Server 2007 (EWS)
Part1: http://www.codeproject.com/KB/exchange/Exchange2007EWS-Part1.aspx
Part2: http://www.codeproject.com/KB/exchange/EWSPart2.aspx
Part3: http://www.codeproject.com/KB/exchange/EWSPart3.aspx -
[MS-OXOCNTC]: Contact Object Protocol Specification 2.2.1.5.3
PidLidBirthdayEventEntryId
http://msdn.microsoft.com/en-us/library/ee217597%28EXCHG.80%29.aspx
Erinnerungen zu Kontakten können hier verlinkt werden
Powershell und EWS
Aus VBScript ist es nicht möglich, Managed-Code einfach aufzurufen. Aber Powershell erlaubt dies schon sehr einfach. Eine sehr gute Quelle hierfür ist das Blog von Glen Scales
- Using the EWS Managed API with powershell
http://gsexdev.blogspot.com/2009/04/using-ews-managed-api-with-powershell.html
Hier werde ich bald deutlich mehr Beispiele bringen. CDO ist tot, es lebe EWS
# Laden der Manages API-DLLs in den Prozessraum
[void][Reflection.Assembly]::LoadFile("C:\Program
Files\Microsoft\Exchange\Web
Services\1.0\Microsoft.Exchange.WebServices.dll")
# ews-Klasse instanzieren
$ewsservice = new-object
Microsoft.Exchange.WebServices.Data.ExchangeService
# ews-Klasse instanzieren wenn zielsystem Exchange 2007 ist
$ewsservice = new-object
Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2007_SP1)
# Optional mit anderen Benutzerdaten anmelden
$ewsservice.Credentials = New-Object System.Net.NetworkCredential("username","passwort","domain")
Autodiscover und Umleitung
Ehe Outlook 2007 SP1 auch mit SRV-Records arbeiten konnte, konnte ein Admin also nur ein Zertifikat für "autodiscover.maildomain.tld" konfigurieren oder ohne SSL einen HTTP-Redirect machen. Das funktioniert mit Outlook 2007 schon sehr gut aber wer per Exchange Web Services darauf zugreifen will, muss eine "Callback"-Funktion einrichten, die die Rückfrage bezüglich der "Umleitung" behandelt.
Das geht mit Powershell 1.0 schon gar nicht und mit 2.0 ist die Komplexität für die MSXFAQ eher hoch. Sie sollten dann einfach die URL manuell angeben
$ewsservice.url = "https://exchangeserver/EWS/exchange.asmx
Postfachzugriff mit "Impersonation" über "ms-Exch-EPI-May-Impersonate"
Oft reicht es nicht per EWS einfach sein eigenes Postfach zu öffnen. So wird es immer Dienstkonten geben, die in Postfächer anderer Benutzer zugreifen müssen. Dazu gibt es wie bei MAPI ebenfalls drei Optionen
- Der Dienst hat Username/Kennwort und meldet sich
damit explizit an
Das kann z.B. ein Webportal machen, an dem sich der Benutzer selbst z.B.: über ein Formular angemeldet hat, so dass das Programm selbst die Zugangsdaten in Klartext hat. Alternativ kann er diese Rechte über Kerberos Constraint Delegation erhalten - Der Dienst hat die erforderlichen Berechtigungen auf
den Postfächern bzw. Datenbanken
Dies eignet sich z.B. wenn nur auf bestimmte Postfächer zugegriffen werden soll (Siehe Mailboxrechte) - EWS Impersonation
Sie können aber einem Dienstkonto auch explizit auf dem CAS-Server das Recht "ms-Exch-EPI-may-Impersonate" geben. Diese Funktion nutzt z.B. auch die TransporterSuite
Der letzte Fall ist das Thema dieses Abschnitts. Da der erste CAS-Server schon die Anmeldung übernimmt und die Server untereinander "vertrauenswürdig" sind, ist damit ein Durchgriff auf alle Postfächer auch in anderen Standorten (CAS 2 CAS Proxy) möglich. Damit kann ich einem Konto das Recht geben, quasi als der angegebene Benutzer zu arbeiten, ohne sich explizit mit dessen Anmeldedaten zu authentifizieren. Dazu unterscheidet Exchange zwei fast gleichlautende Berechtigungen:
- ms-Exch-EPI-Impersonation
Dieses Recht kann man auf dem CAS-Server vergeben, damit ein Benutzer die Funktion "Impersonation" überhaupt verwenden darf - ms-exch-epi-may-impersonate
Dieses Recht regelt auf der Postfachdatenbank oder dem einzelnen Postfach, ob die Daten darin über einen Impersonate-Aufruf angesprochen werden dürfen.
Diese beiden Berechtigungen sind also unabhängig von den üblichen "Vollzugriffs-Rechten" auf Postfächer zu sehen, wie diese auf Mailboxrechte beschrieben werden. Impersonation greift nur beim Zugriff über Webservices während die normalen Postfachrechte für den Zugriff über OWA, MAPI, CDO etc. erforderlich sind.
Die Einrichtung dieser Berechtigungen ist nur über die Powershell möglich. Hier am Beispiel eines CAS-Servers
Add-ADPermission `
-Identity CAS1 `
-User SVCUser`
-extendedRight ms-Exch-EPI-Impersonation
Oder hier über eine Schleife, um alle CAS-Server auf einmal zu konfigurieren:
Get-ExchangeServer | where {$_.IsClientAccessServer -eq $TRUE} | ForEach-Object {Add-ADPermission -Identity $_.distinguishedname -User (Get-User -Identity SVCUser | select-object).identity -extendedRight ms-Exch-EPI-Impersonation}
Die Berechtigungen auf die Postfachdatenbank ist über folgenden Befehl möglich:
Add-ADPermission `
-Identity SG1/MBDATABASE1 `
-User SVCUser`
--ExtendedRights ms-Exch-EPI-May-Impersonate
Oder auch hier wieder für den Zugriff auf alle Postfächer aller Datenbanken:
Get-MailboxDatabase | ForEach-Object {Add-ADPermission -Identity $_.DistinguishedName -User SVCUser -ExtendedRights ms-Exch-EPI-May-Impersonate}
Der Benutzer muss also auf dem CAS-Server das Recht bekommen, überhaupt Impersonation anfordern zu können und auf der Postfachdatenbank die Erlaubnis, mit Impersonation auf die Daten darin zuzugreifen. Das Konto darf zudem kein Administrator sein, da über die Gruppe der Administratoren auch hier wieder ein "DENY" dieses Rechte unterbinden würde.
Wenn die Vergabe von Berechtigungen auf der Datenbank zu weit gehen, kann natürlich ebenfalls über die Benutzer die Berechtigungen vergeben:
Add-ADPermission `
-Identity "Mailbox"`
-User SVCUser `
-extendedRight ms-Exch-EPI-May-Impersonate
Hiermit kann dann das Dienstkonto auf das Postfach zugreifen.
Diese Funktion wird z.B. auch bei der Transporter Suite eingesetzt, damit diese alle Nachrichten in die Exchange Postfächer übertragen kann.
- Configuring Exchange Impersonation (Exchange Web Services)
http://msdn.microsoft.com/en-us/library/bb204095.aspx - Using Exchange Impersonation (Exchange Web Services)
http://msdn.microsoft.com/en-us/library/bb204088.aspx - Exchange Server 2007 SP1 Server-to-Server Authorization
http://msdn.microsoft.com/en-us/library/aa579435.aspx
Wenn Sie nun über EWS diese Funktion nutzen wollen, dann müssen Sie natürlich den Web Services über Impersonation konfigurieren. hier ein Auszug:
ewsservice.impersonatedUserID = new impersonatedUserID(ConnectingIDType.SID,wert)
ewsservice.impersonatedUserID = new impersonatedUserID(ConnectingIDType.PrincipalName,wert)
ewsservice.impersonatedUserID = new impersonatedUserID(ConnectingIDType.SmtpAddress,wert)
Bei Exchange 2010 müssen Sie hier aber dem User auch die Rechte geben (RBAC)
EWS und Notification Services
Die Webservices öffnen noch einen netten Weg: eine Anwendung kann per Webservices eine "Pushbenachrichtigung" einstellen, d.h. der Exchange Server informiert die Anwendung darüber, wenn sich in einem Postfach z.B. etwas tut. Dazu muss die Anwendung selbst auch einen Webservice bereitstellen, welcher von Exchange dann "rückwärts" aufgerufen wird. Als Programmierer weise ich also Exchange an, von von meiner Anwendung angebotenen Webservice bei bestimmten Situationen aufzurufen. Suchen Sie nach
SubscribePullNotification
Sie müssen aber einen Listener entwickeln, welcher dann von Exchange aufgerufen (ebenfalls WebService) wird. Details finden Sie auch hier:
- Henning Krause: Artikelserie zu Push Notifications
http://www.infinitec.de/?tag=/push+notifications - InfiniTec.Exchange.Notifications updated to 1.5.0.0
http://www.infinitec.de/post/2009/05/23/InfiniTecExchangeNotifications-updated-to-1500.aspx - Modul auf Codeplex zur Nutzung von Nortifictions
http://www.codeplex.com/exchangenotification - Push-Notifications – Surviving application restarts
'http://www.infinitec.de/post/2009/01/12/Push-Notifications-e28093-Surviving-application-restarts.aspx
Wenn Sie alles richtig gemacht haben aber ihr Webservice dennoch nicht angesprochen wird, dann sollten Sie einen Blick ins Eventlog tun:.
Event Type: Warning Event Source: MSExchange Web Services Event Category: Core Event ID: 6 Description: Unable to send a notification for subscription fsdfllkn4325kjbzuvjdj2sj1jshj2dk2kj3s1fefh13g4g4sjg34as3244=. (Send attempts: 3)
Event Type: Error Event Source: MSExchange Web Services Event Category: Core Event ID: 7 Description: After 8 unsuccessful attempts to send a notification for subscription fsdfllkn4325kjbzuvjdj2sj1jshj2dk2kj3s1fefh13g4g4sjg34as3244= K8=, subscription has been removed.
Event Type: Warning Event Source: MSExchange Web Services Event Category: Core Event ID: 5 Description: Unable to send a notification for subscription fsdfllkn4325kjbzuvjdj2sj1jshj2dk2kj3s1fefh13g4g4sjg34as3244= K8=. Will retry.
Die lange Zeichenkette ist in Realität eine Base64-codierte Binärdatei, die man zwar decodieren kann, aber viel mehr als den Servername und ein paar kryptische Zeichen sieht man nicht. Es ist aber zumindest ein Hinweis, wohin der Sink gehen sollte. Die Einträge sind übrigens auf dem CAS-Server hinterlegt und wenn ich den Entwicklern glauben darf gibt es keine einfache Möglichkeit eine Liste der aktiven Benachrichtigungen zu generieren.
Man kann allerdings die IIS-Logs durchsuchen, wer, wann ein "Subscribe" auf den Exchange Web Services macht, d.h. im IISLog einfach mal nach "ews/exchange.asmx?SoapAction=Subscribe" suchen.
https://forums.microsoft.com/TechNet/ShowPost.aspx?PostID=931885&SiteID=17
For push notifications, you need to write your own web service that
implements the NotificationService.wsdl interface. Then you subscribe to
receive notifications using the EWS Subscribe web method with a
PushSubscriptionRequest sub-element. You will notice that the
PushSubscriptionRequestType surfaces a status frequency (how often you want
to be alerted of changes) and a URL which is the URL of YOUR web service.
Then EWS will call the SendNotification web method on your service with the
changes. You can unsubscribe by responding to the SendNotification web
method with a subscription status of "Unsubscribe".
Exchange 2007 Webservices ohne Managed API
Eine Echtzeitverarbeitung mit der Option, eine Änderung des Clients zu verhindern oder synchron andere Funktionen durchzuführen ist mit Webservices scheinbar nicht möglich.
Hier nur eine kleine Auswahl von Links. Die MSDN-Seite ist sicher die beste Quelle.
- Exchange Web Services - What You Didn't Know
http://msexchangeteam.com/archive/2009/03/24/450892.aspx - Exchange 2007 - Development: Overview
http://technet.microsoft.com/en-us/library/aa997614.aspx - Introduction to Exchange Web Services in Exchange 2007 (Part 1-3)
http://msdn.microsoft.com/en-us/library/bb408417.aspx
http://msdn.microsoft.com/en-us/library/bb421489.aspx
http://msdn.microsoft.com/en-us/library/bb508825.aspx - Exchange Web Services - What You Didn't Know
http://msexchangeteam.com/archive/2009/03/24/450892.aspx - Exchange Web Services 101 : Let’s get started!
http://blogs.msdn.com/vikas/archive/2009/06/20/exchange-web-services-101-let-s-get-started.aspx - Using Delegate Access with Exchange Web Services
http://msdn.microsoft.com/en-us/library/bb655860.aspx - Using SQL Server Table-Valued User-defined Functions with Exchange Web
Services
http://msdn.microsoft.com/en-us/library/bb508823.aspx - Whitepaper:Managing the Calendaring and Collaboration Process By Using
Exchange Server 2007 Web Services
http://technet.microsoft.com/en-us/library/bb887629.aspx - Using SQL Server Table-Valued User-defined Functions with Exchange Web
Services
http://msdn.microsoft.com/en-us/library/bb508823.aspx - Finding Items
http://msdn.Microsoft.com/library/default.asp?url=/library/en-us/exsdkprogtasks/html/63af1f9c-464b-4fca-9ae3-3d60f24ca93c.asp
Der Code kann noch falsch sein. Update siehe
http://forums.Microsoft.com/TechNet/ShowPost.aspx?PostID=582795&SiteID=17 - TechReady 2007 Exchange Web Services Samples
http://go.microsoft.com/?linkid=7149941
The TechReady 2007 Exchange Web Services samples show how to integrate Microsoft Exchange Server 2007 data within line-of-business applications and third-party solutions by using the new Exchange Web Services feature. - Exchange 2007 3/4: Client Zugriff und Webservices
http://techfiles.de/dmelanchthon/webcasts/1032296864.wmv - WebDAV
- MSPress Buch: Inside Microsoft® Exchange Server 2007 Web Services;
ISBN 9780735623927 - TechReady 2007 Exchange Web Services Samples
http://www.microsoft.com/downloads/details.aspx?FamilyID=211d60c1-55eb-4bfd-8425-fcf980e9ceab&DisplayLang=en - Exchange Web Services Reference
http://msdn2.microsoft.com/en-us/library/bb204119(EXCHG.80).aspx - Exchange Server 2007 Web Service API for Developers!
http://blogs.msdn.com/ericlee/archive/2006/10/22/exchange-server-2007-for-developers.aspx - Exchange 2007 Web Services Around the Web
http://blogs.msdn.com/mstehle/archive/2007/01/23/fyi-exchange-2007-web-services-around-the-web.aspx - Working with Time Zones in the Exchange Web Service
http://msdn2.microsoft.com/en-us/library/bb655859.aspx - Exchange Web Services Windows Vista Gadget Sample Application
http://www.microsoft.com/downloads/details.aspx?FamilyID=F9A0D33C-C894-4EA1-AD20-4E418C715175&displaylang=en - Exchange Server 2007 SP1 Creating an Exchange Web Services Client
Application
http://msdn.microsoft.com/en-us/library/bb408521(EXCHG.80).aspx - Exchange Server 2007 SP1 Getting Started With Exchange Web Services
Proxy Programming
http://msdn.microsoft.com/en-us/library/bb408522(EXCHG.80).aspx - Exchange Server 2007 SP1 Setting Up the ExchangeServiceBinding Proxy
Class
http://msdn.microsoft.com/en-us/library/bb408524(EXCHG.80).aspx - Building Rich Calendaring Experiences with Exchange Web Services
[UNC401]
http://www.msteched.com/online/view.aspx?tid=3ed2cdd6-a4d1-4517-970f-5854095 a8ee8 - Setting the Task owner on new items using Exchange WebServices
http://www.infinitec.de/post/2009/03/19/Setting-the-Task-owner-on-new-items-using-Exchange-WebServices.aspx - Saving custom data on Exchange elements with The Exchange WebServices
http://www.infinitec.de/post/2009/03/27/Saving-custom-data-on-Exchange-elements-with-The-Exchange-WebServices.aspx - Searching a meeting with a specific UID using Exchange Web Services 2007
http://www.infinitec.de/post/2009/04/13/Searching-a-meeting-with-a-specific-UID-using-Exchange-Web-Services-2007.aspx
EWS.DLL als Proxyklasse
Normalerweise nutzt ein Entwickler WSDL, um von einem Webservice die unterstützten Schnittstellen zu erfahren. Dazu muss man aber zur Entwicklungszeit natürlich zugriff auf den Webservice haben. Und nicht alle Entwicklungsumgebungen unterstützen direkt die Einbindung der WSDL-Informationen. Man kann daher die Beschreibung in einer DLL "einpacken", so dass auch andere Umgebungen eine elegante Unterstützung bei der Entwicklung erlauben.
- Exchange API-spotting : Generating Exchange Web Services Proxy
Classes
http://blogs.msdn.com/exchangedev/archive/2007/12/07/generating-exchange-web-services-proxy-classes.aspx - ExchangeServiceBinding Class
http://msdn.microsoft.com/en-us/library/exchangewebservices.exchangeservicebinding(EXCHG.80).aspx
Eleganter weise hat Glen Scales schon wieder die Arbeit getan, die Microsoft im BLOG nicht getan hat und stellt eine EWS.DLL direkt bereit
EWS.DLL zum Download
http://msgdev.mvps.org/exdevblog/ewsutil.zip.
Mit dieser EWS ist es dann auch in Powershell seht einfach auf Exchange 2007 Ressourcen zuzugreifen. Hier ein Beispiel, um sich per Powershell auf den Posteingang zu verbinden.
[void][Reflection.Assembly]::LoadFile("C:\Programme\msxfaq\EWSUtil.dll")
$mbMailboxEmail = "admin@msxfaq.local"
$ewc = new-object EWSUtil.EWSConnection($mbMailboxEmail,$false,$null,$null,$null,$null)
$dTypeFld = new-object EWSUtil.EWS.DistinguishedFolderIdType
$dTypeFld.Id = [EWSUtil.EWS.DistinguishedFolderIdNameType]::inbox
$mbMailbox = new-object EWSUtil.EWS.EmailAddressType
$mbMailbox.EmailAddress = $mbMailboxEmail
$dTypeFld.Mailbox = $mbMailbox
$fldarry = new-object EWSUtil.EWS.BaseFolderIdType[] 1
$fldarry[0] = $dTypeFld
$msgList = $ewc.FindUnread($fldarry, $null, $null, "")
if ($msgList.Count -ne 0){
"Inbox:" + $msgList[0].Subject.ToString()
}
Sie können daher die Beschreibung in eine DLL "einpacken", so dass auch andere Umgebungen eine elegante Unterstützung bei der Entwicklung erlauben.
- Exchange API-spotting : Generating Exchange Web Services Proxy
Classes
http://blogs.msdn.com/exchangedev/archive/2007/12/07/generating-exchange-web-services-proxy-classes.aspx - ExchangeServiceBinding Class
http://msdn.microsoft.com/en-us/library/exchangewebservices.exchangeservicebinding(EXCHG.80).aspx - Finding Unused mailboxes
http://www.outlookexchange.com/articles/glenscales/unreadrep.asp - Exchange Web Services - What You Didn't Know
http://msexchangeteam.com/archive/2009/03/24/450892.aspx
- EWS is Only API for next Exchange Version
- Vista and MAC Gadgets as samples using EWS
- MAC Entourage uses EWS only
- Android uses EWS for Contacts
- Managed API with next version of Exchange
Visual Studio und Webservices
Natürlich können Visual Studio 2005 und 2008 ganz einfach Webservices einbinden. Über das Projektmenü" wird ein Assistent zum einbinden eines Webservice gestartet, der dann eine "Hilfsklasse" erstellt, die in der späteren Entwicklung einfach genutzt werden kann.

Mit Visual Studio 2008 gibt es eine "Service Referenz"

Danach können Sie in Visual Studio die Webservices wie jede andere Klasse verwenden
- Exchange Server 2007 SP1 Creating a Proxy Reference by Using
Visual Studio 2005
http://msdn.microsoft.com/en-us/library/bb408520(EXCHG.80).aspx
Weitere Links
Hier nur eine kleine Auswahl von Links. Die MSDN-Seite ist sicher die beste Quelle.
-
EWSEditor
Zugriff auf Postfachinhalte per Exchange Web Services - Webservice
- What's New in AD DS: Active Directory Web Services
http://technet.microsoft.com/en-us/library/dd391908%28WS.10%29.aspx - Wikipedia Beschreibung
http://de.wikipedia.org/wiki/Webservice
http://en.wikipedia.org/wiki/Web_service - Web Services Activity
http://www.w3.org/2002/ws/ - WebDAV
WebDAV ist nicht WebSerivces, auch wenn bei de HTTP und XML nutzen - Exchange 2007 3/4: Client Zugriff und Webservices
http://techfiles.de/dmelanchthon/webcasts/1032296864.wmv - Exchange Server 2007 - Exchange Web Services
http://msdn2.microsoft.com/en-us/library/aa579187.aspx - Exchange Server 2007 SP1 Creating Contacts (Exchange Web Services)
http://msdn.microsoft.com/en-us/library/aa563318(EXCHG.80).aspx - Exchange Server 2007 Web Service API for Developers!
http://blogs.msdn.com/ericlee/archive/2006/10/22/exchange-server-2007-for-developers.aspx - Exchange Web Services Windows Vista Gadget Sample Application
http://www.microsoft.com/downloads/details.aspx?familyid=F9A0D33C-C894-4EA1-AD20-4E418C715175&displaylang=en - Exchange Web Services OSX Widget
http://www.codeplex.com/EWSMacWidget -
Wrapper (OpenSource), der viel von der Arbeit abnimmt, die man beim
Implementieren von Push Notifications hat.
http://www.codeplex.com/exchangenotification -
Blog-Eintrag zu Push Benachrichtigung
http://www.infinitec.de/?tag=/push+notifications -
Outlook Communicator Phone Edition interactions with Exchange Web Services
http://communicatorteam.com/archive/2008/03/18/130.aspx









