Erste Schritte mit Exchange Web Services 2010

Habe ich beauftragt, mit dem schreiben eines SOAP-web-service .Net zu middleware zwischen EWS2010 und ein application server, der Sie vorher benutzt WebDAV-Verbindung zu Exchange. (Wie ich es verstehe, ist WebDAV Weg gehen, EWS2010, so dass der application server wird nicht mehr in der Lage sein zu verbinden, wie es zuvor getan hat, und es ist exponentiell schwieriger zu verbinden EWS ohne WebDAV. Die Theorie ist, dass es zu tun .Net sollte einfacher sein als alles andere... Oder?!)

Mein end-Ziel ist es, in der Lage sein, um bekommen und erstellen/aktualisieren E-Mail, Kalender, Kontakte und to-do-Liste, die Elemente, die für einen bestimmten Exchange-Konto. (Das löschen ist derzeit nicht notwendig, aber ich kann bauen für die Zukunft berücksichtigen, wenn es leicht genug).

Ich war ursprünglich einige Beispiel-code, die in der Tat Arbeit, aber ich merkte schnell, dass es veraltet war. Die Typen und Klassen, die verwendet nirgendwo angezeigt in die aktuelle Dokumentation.

Beispielsweise die Methode verwendet, um eine Verbindung zum Exchange-server war:

ExchangeService svc = new ExchangeService();
svc.Credentials = new WebCredentials(AuthEmailAddress, AuthEmailPassword);
svc.AutodiscoverUrl(AutoDiscoverEmailAddress);

Für was es Wert ist, dieses wurde mit einer assembly, die kam mit dem Beispiel-code: Microsoft.Exchange.WebServices.dll ("MEWS").

Bevor ich erkannte, dass dies nicht den aktuellen standard erreicht die Verbindung, und es hat funktioniert, ich habe versucht, auf ihn zu bauen, und fügen Sie eine Methode zum erstellen von Kalendereinträgen, die ich kopiert von hier:

static void CreateAppointment(ExchangeServiceBinding esb)
{
    //Create the appointment.
    CalendarItemType appointment = new CalendarItemType();

    ...
}

Richtigen Weg, ich bin konfrontiert mit dem Unterschied zwischen ExchangeService und ExchangeServiceBinding ("ESB"); so begann ich zu Googeln, um zu versuchen und herauszufinden, wie man eine ESB-definition, so dass die CreateAppointment Methode kompilieren. Ich fand in diesem blog-postdie erklärt, wie zu generieren der proxy-Klassen aus einer WSDL-Datei, was ich auch Tat.

Leider, dies führte zu einigen Konflikten, in denen Typen, die definiert wurden in der ursprünglichen Montage Microsoft.Exchange.WebServices.dll (das kam mit der Beispiel-code) deckungsgleich mit den Typen in meiner neuen EWS.dll Montage (die ich zusammengestellt aus der code generiert sich aus der services.wsdl zur Verfügung gestellt, die von der Exchange-server).

Ich ausgeschlossen die MEWS Versammlung, die nur alles noch schlimmer gemacht. Ich ging von einer Handvoll von Fehlern und Warnungen zu 25 Fehler und 2,510 Warnungen. Alle Arten von Typen und Methoden, die nicht gefunden wurden. Etwas ist eindeutig falsch, hier.

Also ging ich wieder auf die Jagd. Ich fand Anweisungen zum hinzufügen von Dienst-Referenzen und web-Referenzen (D. H. die zusätzlichen Schritte, dauert es in VS2008), und ich denke, ich bin wieder auf dem richtigen Weg.

Habe ich entfernt (tatsächlich, für jetzt, nur ausgeschlossen), die alle bisherigen Versammlungen, die ich versucht hatte; und ich fügte hinzu, eine service-Referenz für https://my.exchange-server.com/ews/services.wsdl

Jetzt bin ich nur noch 1 Fehler und 1 Warnung.

Warnung:

Das element "transport" enthalten, nicht Kind-element 'extendedProtectionPolicy', da das übergeordnete element den content-Modell ist leer.

Dies ist in Bezug auf eine änderung, die gemacht wurde, um web -.config, wenn ich fügte hinzu, die service-Referenz; und ich fand ein Update für die, die hier auf SO. Ich habe kommentiert, dass Abschnitt als angegeben, und es hat die Warnung Weg, so woot.

Den Fehler noch nicht so leicht zu umgehen, aber:

Fehler:

Der Typ oder namespace-name 'ExchangeService" konnte nicht gefunden werden (fehlt eine using-Direktive oder ein Assemblyverweis?)

Dies ist in Bezug auf die Funktion, ich war mit, um die EWS-Verbindung, die durch den web-Methoden:

private ExchangeService getService(String AutoDiscoverEmailAddress, String AuthEmailAddress, String AuthEmailPassword)
{
    ExchangeService svc = new ExchangeService();
    svc.Credentials = new WebCredentials(AuthEmailAddress, AuthEmailPassword);
    svc.AutodiscoverUrl(AutoDiscoverEmailAddress);
    return svc;
}

Diese Funktion funktionierte perfekt mit den MEWS assembly aus dem sample-code, aber die ExchangeService Typ ist nicht mehr verfügbar. (Noch ist ExchangeServiceBindingdas war das erste was ich überprüft.)

In diesem Punkt, da bin ich mir nicht folgenden Anweisungen aus der Dokumentation (ich konnte nicht finden überall in der Dokumentation, sagte einen Dienst hinzufügen Bezug auf Ihr Exchange server-Dienste.wsdl-aber das scheint die beste/am weitesten, die ich bisher bekommen haben), fühle ich mich wie im Blindflug.

Ich weiß, ich muss herausfinden, was es ist, sollte das ersetzen ExchangeService /ExchangeServiceBindingumzusetzen, und arbeiten Sie sich dann durch was auch immer Fehler auftauchen als Ergebnis, dass der Schalter...

Aber ich habe keine Ahnung, wie das geht, oder wo zu suchen, wie es zu tun. Googeln "ExchangeService" und "ExchangeServiceBinding" scheinen nur zurück zu führen auf veraltete blog-Beiträge und MSDN, keiner von denen hat bewiesen, furchtbar hilfreich bisher.

Was sollte ich ersetzen ExchangeService /ExchangeServiceBinding mit? Ist es eine andere Lage, Dokumente, die für die Arbeit mit EWS-das ist besser als die MSDN?

InformationsquelleAutor der Frage Adam Tuttle | 2010-03-18

Schreibe einen Kommentar