Pregunta

He recibido el encargo de escribir un servicio web SOAP en .Net ser middleware entre EWS2010 y un servidor de aplicaciones que anteriormente se utiliza WebDAV para conectarse a Exchange. ( Como lo entiendo, WebDAV se va con EWS2010, por lo que el servidor de aplicaciones ya no será capaz de conectarse como lo hizo anteriormente, y es exponencialmente más difícil para conectarse a sistemas de alerta temprana y sin WebDAV. La teoría es que lo hace en .Net debería ser más fácil que cualquier otra cosa ... ¿verdad?! )

Mi objetivo final es ser capaz de obtener y crear / actualizar correo electrónico, elementos del calendario, elementos de la lista de contactos y de tareas pendientes para una cuenta de Exchange especificado. (Esta acción no es necesaria actualmente, pero puede construir en consideración el futuro, si es bastante fácil).

Me dieron originalmente un código de ejemplo, lo que hizo en el trabajo hecho, pero rápidamente me di cuenta de que era obsoleta. Los tipos y clases que se utilizan aparecen en ninguna parte de 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);

Por lo que vale, esto estaba usando un montaje que se suministra con el código de ejemplo:. Microsoft.Exchange.WebServices.dll ( "Encanto")

Antes de que me di cuenta de que esta no era la forma estándar actual para llevar a cabo la conexión, y funcionó, traté de construir sobre ella y añadir un método para crear los elementos de calendario, que I copiada de aquí :

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

    ...
}

Ahora mismo, estoy enfrentado con la diferencia entre ExchangeService y ExchangeServiceBinding ( "ESB"); así que empecé a buscar en Google para tratar de encontrar la manera de obtener una definición ESB para que el método CreateAppointment compilará. He encontrado este blog puesto que explica cómo generar una clase de proxy desde un WSDL, lo que hice.

Por desgracia, esto causó algunos conflictos en los tipos que se definieron en la Asamblea original, Microsoft.Exchange.WebServices.dll (que viene con el código de ejemplo) se superponen con tipos en mi nuevo montaje EWS.dll (que I recopilados a partir del código generado a partir de la services.wsdl proporcionada por el servidor de Exchange).

Excluí la asamblea ANTIGUA, que sólo empeoró las cosas. Fui de un puñado de errores y advertencias a 25 errores y advertencias 2.510. No se encontraron todo tipo de tipos y métodos. Algo es claramente erróneo, aquí.

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

He quitado (en realidad, por ahora, sólo excluido) todos los conjuntos anteriores que había estado tratando; y añadí una referencia de servicio para https://my.exchange-server.com/ews/services.wsdl

Ahora estoy abajo a sólo 1 1 error y advertencia.

  

Advertencia:
  'Transporte' El elemento no puede contener elemento hijo 'ExtendedProtectionPolicy' debido modelo de contenido del elemento padre está vacía.

Esto es en referencia a un cambio que se hizo para web.config cuando he añadido la referencia de servicio; y acabo de encontrar una solución para que aquí en la SO . Me he comentado esa sección como se indica, y se hizo el aviso desaparece, por lo woot para eso.

El error no ha sido tan fácil de recorrer, sin embargo:

  

Error:
  El tipo o espacio de nombres 'ExchangeService' no se pudo encontrar (are que falta una directiva using o una referencia de ensamblado?)

Esto es en referencia 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ó a la perfección con el conjunto ANTIGUA del código de ejemplo, pero el tipo ExchangeService ya no está disponible. (Tampoco es ExchangeServiceBinding, eso fue lo primero que comprobé.)

En este punto, ya que no estoy siguiendo las instrucciones de la documentación (no pude encontrar en cualquier parte de la documentación que se dijo para agregar una referencia de servicio a services.wsdl de su servidor de Exchange - pero eso no parece ser la mejor / más lejos que he conseguido hasta ahora), me siento como que estoy volando a ciegas.

Sé que necesito averiguar lo que sea que debe reemplazar ExchangeService / ExchangeServiceBinding, implementar eso, y luego trabajar a través de cualquier errores surgir como resultado de que el interruptor ...

Pero no tengo idea de cómo hacer eso, o dónde buscar la forma de hacerlo. Googlear "ExchangeService" y "ExchangeServiceBinding" sólo se parecen conducir de nuevo a las entradas del blog de MSDN y obsoletas, ninguno de los cuales ha demostrado ser tremendamente útil hasta el momento.

¿Qué debo reemplazar ExchangeService / ExchangeServiceBinding con? ¿Hay algún otro lugar que los documentos trabajan con sistemas de alerta temprana que es mejor que la de MSDN?

¿Fue útil?

Solución

Yo recomendaría pasar a la API de EWS Managed. Es mucho más fácil de usar que tratar de improvisar todo junto a ti mismo. Es compatible tanto con Exchange 2007 SP1 y Exchange 2010. Creo que lo encontrará mucho más fácil de usar y es probable que eliminar sus problemas.

Version 1: Aquí está la descarga de Microsoft .

Y aquí están los documentos MSDN .

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

Descarga - MSDN Docs


añadida por la pregunta autor de la pregunta:

enlaces adicionales que resultaron útiles:

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top