sp2 software services office microsoft kit exchange ews development c# .net exchange-server exchangewebservices

c# - software - Comenzando con los servicios web de Exchange 2010



exchange web services office 365 (1)

Se me ha asignado la tarea de escribir un servicio web SOAP en .Net para ser middleware entre EWS2010 y un servidor de aplicaciones que anteriormente utilizaba WebDAV para conectarse a Exchange. ( Según tengo entendido, WebDAV se irá con EWS2010, por lo que el servidor de aplicaciones ya no podrá conectarse como lo hizo anteriormente, y es exponencialmente más difícil conectarse a EWS sin WebDAV. La teoría es que hacerlo en .Net debería ser más fácil que cualquier otra cosa ... ¡¿Cierto ?! )

Mi objetivo final es poder obtener y crear / actualizar correos electrónicos, elementos del calendario, contactos y elementos de la lista de tareas para una cuenta de Exchange específica. (La eliminación no es actualmente necesaria, pero puedo integrarla para futuras consideraciones, si es lo suficientemente fácil).

Originalmente me dieron un código de muestra, que de hecho funcionó, pero rápidamente me di cuenta de que estaba desactualizado. Los tipos y clases utilizados no aparecen en ninguna parte en la documentación actual .

Por ejemplo, el método utilizado para crear una conexión con el servidor de Exchange fue:

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

Para lo que vale, esto fue usar un ensamblaje que vino con el código de ejemplo: Microsoft.Exchange.WebServices.dll ("MEWS").

Antes de darme cuenta de que esta no era la forma estándar actual de realizar la conexión, y funcionó, intenté desarrollarla y agregar un método para crear elementos de calendario, que copié desde aquí :

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

De inmediato, me enfrento a la diferencia entre ExchangeService y ExchangeServiceBinding ("ESB"); así que empecé a buscar en Google para averiguar cómo obtener una definición de ESB para que se CreateAppointment método CreateAppointment . Encontré esta publicación de blog que explica cómo generar una clase proxy desde un WSDL, lo cual hice.

Desafortunadamente, esto causó algunos conflictos donde los tipos que se definieron en la Asamblea original, Microsoft.Exchange.WebServices.dll (que venía con el código de ejemplo) se superponían con los Tipos en mi nuevo conjunto EWS.dll (que compilé a partir del código generado a partir de Los services.wsdl proporcionados por el servidor de Exchange).

Excluí la asamblea de MEWS, que solo empeoró las cosas. Pasé de un puñado de errores y advertencias a 25 errores y 2.510 advertencias. No se encontraron todo tipo de tipos y métodos. Algo está claramente mal aquí.

Así que volví a la caza. Encontré instrucciones sobre cómo agregar referencias de servicio y referencias web (es decir, los pasos adicionales que toma en VS2008 ), y creo que estoy de vuelta en el camino correcto.

Quité (en realidad, por ahora, solo excluí) todos los ensamblajes anteriores que había estado intentando; y agregué una referencia de servicio para https://my.exchange-server.com/ews/services.wsdl

Ahora estoy a solo 1 error y 1 advertencia.

Advertencia:
El elemento ''transporte'' no puede contener el elemento secundario ''extendedProtectionPolicy'' porque el modelo de contenido del elemento principal está vacío.

Esto se refiere a un cambio que se realizó en web.config cuando agregué la referencia del servicio; y acabo de encontrar una solución para eso aquí en SO . He comentado esa sección tal como se indica, y hizo que la advertencia desapareciera, así que sigue adelante.

Sin embargo, el error no ha sido tan fácil de solucionar:

Error:
No se pudo encontrar el tipo o el nombre del espacio de nombres ''ExchangeService'' (¿falta una directiva de uso o una referencia de ensamblado?)

Esto se refiere a la función que estaba usando para crear la conexión EWS, llamada por cada uno de los métodos 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; }

Esta función funcionó perfectamente con el ensamblaje MEWS del código de ejemplo, pero el tipo de Servicio de ExchangeService ya no está disponible. (Tampoco es ExchangeServiceBinding , eso fue lo primero que verifiqué).

En este punto, ya que no estoy siguiendo ninguna dirección de la documentación (no pude encontrar en ninguna parte de la documentación que diga agregar una referencia de servicio a services.wsdl de su servidor Exchange, pero parece ser la mejor / más lejos que he llegado hasta ahora, siento que estoy volando a ciegas.

Sé que debo averiguar qué es lo que debería reemplazar a ExchangeService / ExchangeServiceBinding , implementarlo y luego solucionar cualquier error que surja como resultado de ese cambio ...

Pero no tengo idea de cómo hacerlo, ni dónde buscar cómo hacerlo. El "ExchangeService" y "ExchangeServiceBinding" de Google solo parecen llevar a publicaciones de blog y MSDN obsoletas, ninguna de las cuales ha demostrado ser muy útil hasta ahora.

¿Con qué debo reemplazar ExchangeService / ExchangeServiceBinding ? ¿Hay alguna otra ubicación que documente trabajar con EWS que sea mejor que MSDN?


Recomendaría pasar a la API de EWS administrada. Es mucho más fácil de usar que tratar de improvisar todo juntos. Es compatible con Exchange 2007 SP1 y Exchange 2010. Creo que le resultará mucho más fácil de usar y probablemente eliminará sus problemas.

Versión 1: Aquí está la descarga de Microsoft .

Y aquí están los documentos de MSDN .

Para la versión 2 (gracias @ruffin!)

Download - MSDN Docs

Agregado por el interrogador de preguntas:

Enlaces adicionales que resultaron útiles: