2010-02-12 28 views
10

Estoy construyendo una DLL, vamos a llamarlo mydll.dll, y en ella a veces es necesario para llamar a métodos de servicio web, myservice. mydll.dll se crea usando C# y .NET 3.5.Consumir servicio web desde un archivo DLL .NET - app.config problema

consumir myservice de mydll He añadido un servicio en Visual Studio 2008, que es más o menos lo mismo que usar svcutil.exe. Al hacerlo, crea una clase que puedo crear y agrega configuraciones de punto final y enlaces a mydll app.config.

El problema aquí es que mydll app.config nunca se carga. En su lugar, lo que está cargado es el app.config o web.config del programa que utilizo mydll en.

espero mydll evolucione, que es por eso que he desacoplado es funcionalidad del resto de mi sistema para empezar. Durante esa evolución, probablemente agregará más servicios web a los que llamará, descartando formas manuales de copiar y pegar para solucionar este problema.

He mirado en varios enfoques posibles para atacar este problema:

  1. copiar manualmente los puntos finales y los enlaces de mydell app.config para apuntar EXE o en la web de archivos .config.
    Parejas los módulos, no es flexible
  2. Incluir puntos finales y los enlaces de mydll app.config en .config destino, utilizando configSource (ver here). también añaden acoplamiento entre módulos
  3. carga mediante programación mydll app.config, lea los puntos finales y los enlaces, y cree una instancia encuadernación y EndpointAddress.
  4. utilizar una herramienta diferente para crear interfaz local para myservice

No estoy seguro de qué camino tomar. La opción 3 suena prometedora, pero resulta que es mucho de trabajo y probablemente presentará varios errores, por lo que es dudoso que valga la pena. Tampoco estoy familiarizado con ninguna herramienta que no sea el svcutil.exe canónico.

Indique los pros y contras de la alternativa anterior, brinde sugerencias para implementar cualquiera de ellos o sugiera otros enfoques.

Gracias,
Asaf

Respuesta

4

Prefiero opción 5 - "En la configuración del código", sí, sí, se pierde el beneficio de cambio sin recompilar, pero depende de lo que necesite. Si sabe que nunca cambiará sus puntos finales o los cambiará raramente - solo haga su configuración en código, obtendrá la verificación del tiempo de compilación como un bonus =) This y this pueden ayudar.

Y por cierto, la configuración en configuraciones de cliente es un caso común, si usted tiene una gran cantidad de clientes esta esto puede ser el dolor y usted debe pensar en 3 o 5 =)

+0

Iré con la copia manual de la configuración y agregaré lo que ha recomendado más adelante. ¡Gracias! –

+0

De nada =) – Restuta

0

que debería ir de la opción 1 o 2 (para mí éste es mejor). Los módulos están acoplados en el dll, por lo que ya están acoplados. Cambiar una configuración es trivial, pero crear una infraestructura para la lectura lo emparejará más.

Las opciones 3 y 4 son mucho más trabajo.

0

He compilado mi open source web services framework hasta un solo dll también. Aunque tomé un enfoque completamente diferente, creé IHttpHandler genérico para los puntos finales JSON y XML (y la configuración WCF genérica para los puntos finales SOAP) que pueden manejar cada solicitud. Por lo tanto, mi configuración es un simple trazador de líneas para todos los de mis servicios web asignando el punto final a mi controlador que reside en el archivo .config del host de la aplicación (es decir, ASP.NET Web.config o Console App.config) donde está destinado ser.

2

Puede usar svcutil como un evento posterior a la compilación en la aplicación que consume la DLL. De esta manera:

svcutil.exe <service_address> /config:$(TargetPath).config /mergeConfig 

Esto se fusionará la configuración necesaria en yourapp.exe.config. Si agrega una nueva referencia de servicio en el archivo DLL, debería agregar otra línea aquí, por lo que no es completamente automática, pero aún es un poco más simple que copiar manualmente la configuración.

Cuestiones relacionadas