Question

J'ai été chargé de la rédaction d'un web service SOAP en .Net être middleware entre EWS2010 et un serveur d'application qui précédemment utilisé WebDAV pour se connecter à Exchange. ( Si je comprends bien, WebDAV va disparaître EWS2010, de sorte que le serveur d'application ne sera plus en mesure de se connecter comme il l'a fait précédemment, et il est exponentiellement plus difficile de se connecter à SAP sans WebDAV. La théorie est que faire en .Net devrait être plus facile que toute autre chose ... droit! )

Mon objectif final est de pouvoir get et créer / mettre à jour email, éléments de calendrier, des contacts et des tâches à faire la liste pour un compte Exchange spécifié. (Suppression est pas nécessaire, mais je peux construire dans pour l'examen futur, s'il est assez facile).

je d'abord donné quelques exemples de code, qui a fait dans le travail fait, mais je suis vite rendu compte qu'il était pas à jour. Les types et les classes utilisées apparaissent nulle part dans la documentation actuelle .

Par exemple, la méthode utilisée pour créer une connexion au serveur Exchange est:

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

Pour ce que ça vaut la peine, ce utilisait un ensemble qui est venu avec l'exemple de code. Microsoft.Exchange.WebServices.dll ( « MEWS »)

Avant que je compris que ce n'était pas la manière standard actuelle pour réaliser la connexion, et cela a fonctionné, j'ai essayé de le développer et ajouter une méthode pour créer des éléments de calendrier, que je copié à partir d'ici :

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

    ...
}

Tout de suite, je suis confronté à la différence entre ExchangeService et ExchangeServiceBinding ( « ESB »); alors j'ai commencé googler pour essayer de comprendre comment obtenir une définition ESB afin que la méthode de CreateAppointment compilera. J'ai trouvé ce blog post qui explique comment générer une classe proxy à partir d'un WSDL, que je l'ai fait.

Malheureusement, cela a causé des conflits où les types qui ont été définis à l'Assemblée d'origine, Microsoft.Exchange.WebServices.dll (fourni avec l'exemple de code) se chevauchaient avec les types dans mon nouvel ensemble EWS.dll (que je Compilé à partir du code généré à partir du services.wsdl fourni par le serveur Exchange).

J'exclu l'ensemble Mews, qui ne fait qu'empirer les choses. Je suis passé d'une poignée d'erreurs et d'avertissements à 25 erreurs et 2.510 avertissements. Tous les types de types et méthodes sont introuvables. Quelque chose est manifestement erronée, ici.

Je suis donc retourné à la chasse. J'ai trouvé des instructions sur l'ajout de références de service et les références web (par exemple les étapes supplémentaires qu'il faut dans VS2008 ), et je pense que je suis de retour sur la bonne voie.

Je retiré (en fait, pour l'instant, juste exclu) toutes les assemblées précédentes, j'avais essayé; et j'ai ajouté une référence de service pour https://my.exchange-server.com/ews/services.wsdl

Maintenant, je suis à seulement 1 erreur et 1 avertissement.

  

Attention:   L'élément « transport » ne peut pas contenir l'élément enfant « ExtendedProtectionPolicy » parce que le modèle de contenu de l'élément parent est vide.

Ceci est en référence à une modification apportée à web.config quand j'ai ajouté la référence de service; et je viens de trouver un correctif pour que ici sur le SO . Je l'ai fait remarquer que la section comme indiqué, et il a fait faire disparaître l'avertissement, si Woot pour cela.

L'erreur n'a pas été si facile de se déplacer, cependant:

  

Erreur:   n'a pas pu être trouvé le nom du type ou espace de noms « ExchangeService » (are vous manque une directive ou en utilisant une référence d'assemblage?)

Ceci est en référence à la fonction que j'utilisais pour créer la connexion serveur Web intégré, appelé par chacune des méthodes Web:

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

Cette fonction a parfaitement fonctionné avec l'ensemble MEWS à partir du code de l'échantillon, mais le type de ExchangeService est plus disponible. (Nor est ExchangeServiceBinding, qui était la première chose que j'ai vérifié.)

A ce point, puisque je ne suis pas suivant les directives de la documentation (je ne pouvais pas trouver nulle part dans la documentation que dit d'ajouter une référence de service au services.wsdl de votre serveur Exchange - mais cela ne semble être le meilleur / plus loin que j'ai eu à ce jour), je me sens comme si je suis à l'aveuglette.

Je sais que je dois comprendre quoi que ce soit qui devrait remplacer ExchangeService / ExchangeServiceBinding, mettre en œuvre que, puis travailler à travers quelles que soient les erreurs surgissent à la suite de ce commutateur ...

Mais je ne sais pas comment faire, ou où chercher comment le faire. Googler « ExchangeService » et « ExchangeServiceBinding » ne semblent ramener à des postes de blog obsolètes et MSDN, ni qui a fait leurs preuves terriblement utile à ce jour.

Que dois-je remplacer ExchangeService / ExchangeServiceBinding avec? Y at-il un autre endroit que des documents de travail avec SAP qui est mieux que MSDN?

Était-ce utile?

La solution

Je recommande de passer à l'API Managed EWS. Il est beaucoup plus facile à utiliser que d'essayer de bricoler tout ensemble vous-même. Il prend en charge Exchange 2007 SP1 et Exchange 2010. Je pense que vous trouverez beaucoup plus facile à utiliser et probablement éliminer vos problèmes.

Version 1: Voici le téléchargement de Microsoft .

Et voici documentation MSDN .

Pour la version 2 (merci @ruffin!)

Télécharger - MSDN Docs


Ajouté par question asker:

Liens supplémentaires qui se sont révélées utiles:

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top