Pregunta

Tengo una aplicación WPF en VS 2008 con algunas referencias de servicios web.Por diversas razones (tamaño máximo de mensaje, métodos de autenticación), necesito definir manualmente una serie de configuraciones en app.config del cliente WPF para los enlaces de servicio.

Desafortunadamente, esto significa que cuando actualizo las referencias de servicio en el proyecto terminamos con un desastre: múltiples enlaces y puntos finales.Visual Studio crea nuevos enlaces y puntos finales con un sufijo numérico (es decir, "Servicio1" como un duplicado de "Servicio"), lo que genera una configuración no válida ya que puede haber solo un enlace único por referencia de servicio en un proyecto.

Esto es fácil de duplicar: simplemente cree un servicio web ASP.Net "Hello World" simple y una aplicación WPF en una solución, cambie maxBufferSize y maxReceivedMessageSize en el enlace app.config y luego actualice la referencia del servicio.

Por el momento, estamos solucionando esto simplemente deshaciendo el pago en app.config después de actualizar las referencias, pero no puedo evitar pensar que debe haber una manera mejor.

Además, las configuraciones que debemos cambiar manualmente son:

<security mode="TransportCredentialOnly">
    <transport clientCredentialType="Ntlm" />
</security>

y:

<binding maxBufferSize="655360" maxReceivedMessageSize="655360" />

Usamos una clase de fábrica de servicios, por lo que si estas configuraciones se pueden establecer de alguna manera mediante programación, eso funcionaría, aunque las propiedades no parecen estar expuestas.

¿Fue útil?

Solución

Cree un archivo .Bat que use svcutil, para la generación de proxy, que tenga la configuración adecuada para su proyecto.Es bastante fácil.Es fácil hacer clic en el archivo bat para generar nuevos archivos proxy cada vez que se cambie la interfaz.

Luego, el lote se puede utilizar en compilaciones automatizadas.Entonces sólo necesitarás configurar app.config (o web.config) una vez.Generalmente separamos las diferentes configuraciones para diferentes entornos, como desarrollo, producción de prueba.

Ejemplo (cuidado con los saltos de línea):

REM generate meta data
call "SVCUTIL.EXE" /t:metadata "MyProject.dll" /reference:"MyReference.dll"

REM making sure the file is writable
attrib -r "MyServiceProxy.cs"

REM create new proxy file
call "SVCUTIL.EXE" /t:code *.wsdl *.xsd /serializable /serializer:Auto /collectionType:System.Collections.Generic.List`1  /out:"MyServiceProxy.cs" /namespace:*,MY.Name.Space /reference:"MyReference.dll" 

:)

//W

Otros consejos

En lugar de cambiar el punto final generado, puede agregar un segundo punto final y una definición de enlace con la configuración que necesita, luego en su código simplemente ingrese el nombre del nuevo punto final en el constructor de su cliente de servicio.

De alguna manera prefiero usar svcutil.exe directamente que usar la función "Agregar referencia de servicio" de Visual Studio :P Esto es lo que estamos haciendo en nuestros proyectos WCF.

Entiendo tu punto, svcutil es definitivamente la forma más avanzada de agregar y actualizar referencias de servicios.Es un poco más de trabajo manual cuando "hacer clic derecho, actualizar referencia" está tan cerca de funcionar en un solo paso.

Supongo que podríamos crear algunos archivos por lotes o algo así para generar simplemente el código de referencia.Incluso entonces, verificar y actualizar manualmente el código de servicio con svcutil probablemente será más trabajo que simplemente deshacer la verificación en la configuración.

Gracias por el consejo en cualquier caso.

Lo que hacemos es verificar (desde el control de código fuente) los archivos app.config y *.cs que genera automáticamente la utilidad svcutil.exe, luego ejecutamos un archivo por lotes que ejecuta svcutil.exe para recuperar los metadatos del servicio.Cuando termina, volvemos a compilar el código, nos aseguramos de que funcione y luego verificamos los archivos actualizados app.config y *.cs nuevamente.Es mucho más confiable que usar "Agregar referencia de servicio", que suele tener errores, con Visual Studio.

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