Estoy intentando escribir algún código en C# que llame a un servicio WCF sobre la marcha importando el WSDL, examinándolo y luego haciendo llamadas a él dinámicamente.Llamar a un servicio WCF sin generar un ensamblaje
El servicio al que estoy llamando puede cambiar de vez en cuando, por lo que quiero que mi cliente conozca nuevos métodos y nuevos parámetros de entrada y salida para las llamadas, sin reconstruir mi cliente.
Una posible solución a esto es importar y compilar una referencia de servicio sobre la marcha.
esbozado aquí: Creating an assembly on the fly from a WSDL
me gustaría evitar la generación de un ensamblaje y luego reflexionar sobre ella, si es posible.
Miré en el código del proxy dinámico en el enlace y usan una clase de marco para hacer la importación. Esta clase es WsdlImporter
. Así que lo pensé muy bien: puedo usar eso y examinar el esquema WSDL y determinar qué llamadas están presentes y qué entradas y salidas están disponibles.
El problema es que la información de tipo falta en los objetos MessagePartDescription
que crea el WsdlImporter
. Aparentemente esto falta because it cannot find the types yet - see the response to the question from Brian.
¿Algún consejo sobre cómo debo proceder? ¿Estoy completamente en el camino equivocado aquí?
¿Puede dar un ejemplo del mundo real de cómo esto sería útil? ¿Hay una interfaz de usuario presentada a un usuario de su cliente que le permite seleccionar métodos para llamar, tal vez algún tipo de programador o algo así? Además, ¿qué hay de malo en crear un ensamblaje sobre la marcha? Eso suena bastante directo. ¿Estás imaginando algo más simple que la reflexión? Tengo problemas imaginando lo que sería. – JohnOpincar
Esto se usará para llamar a un servicio WF. El flujo de trabajo puede cambiar: se pueden agregar/eliminar pasos, etc. – Neil
@JohnOpincar - Mi objeción no es a la reflexión, sino a la compilación sobre la marcha del ensamblaje. Parece que es un enfoque que puede causar problemas de seguridad en algún momento, y * puede * ser frágil. También me parece extraño que cuando toda la información esté en el WSDL y dado que eventualmente las llamadas serán ordenadas a través de algo que se parece mucho a una API dinámica que construye una capa dinámica con reflexión sobre una capa estática que fue creado dinámicamente que luego se mapeó a una capa dinámica es un poco mucho. Crear el ensamblaje sobre la marcha es mi plan de respaldo. – Neil