Pregunta

Me encuentro con este problema cuando escribo un controlador de eventos en SharePoint.Mi controlador de eventos tiene una referencia web.Cuando creo esta referencia web, la URL del servicio web se agregará en el archivo .config del ensamblaje.Si tengo que cambiar la URL de referencia web, solo tengo que cambiar el enlace en el archivo de configuración.

El problema surge cuando intento usar GAC en el dll.Cuando hago GAC con la DLL, el archivo de configuración no se puede usar con GAC junto con la dll y, por lo tanto, no hay forma de actualizar la referencia web.

Una solución que he encontrado es modificar el método constructor de la clase Reference.cs, que Visual Studio genera automáticamente cuando agrego una referencia, de modo que el constructor lea la URL del servicio web desde alguna otra ubicación, digamos un registro o un archivo XML en algún ubicación predeterminada.Pero esto a veces plantea un problema, ya que cuando actualizo la referencia web usando Visual Studio, este archivo Reference.cs se regenera y todas mis modificaciones se perderán.

¿Existe una mejor manera de resolver este problema?

¿Fue útil?

Solución

Si tiene Visual Studio 2008, use una referencia de servicio en lugar de una referencia web, lo que generará clases parciales que puede usar para anular la funcionalidad sin que el generador sobrescriba su código.

Para Visual Studio 2005, puede simplemente agregar el parcial palabra clave para la clase en Reference.cs y mantenga un archivo separado con su propia clase parcial:

public partial class WebServiceReference
 { public WebServiceReference(ExampleConfigurationClass config) 
    { /* ... */
    }
 }

WebServiceReference svc = new WebServiceReference(myConfig);

Otros consejos

Cualquier aplicación alojada en SharePoint utiliza web.config ubicado en la raíz de su sitio web de SharePoint en IIS.Lo que debe hacer es agregar la configuración generada por el asistente de referencia web/servicio a su web.config.

Así es aproximadamente como funciona:

  • El grupo de aplicaciones de SharePoint carga su DLL
  • Su DLL busca la información del servicio en el archivo de configuración de la aplicación actual
  • Su DLL encuentra web.config y busca información de configuración allí

Básicamente, no se utiliza el app.config que se genera en su DLL.Como la aplicación en este caso es el grupo de aplicaciones (w3wp.exe) que aloja la aplicación de SharePoint.Para SharePoint, app.config en realidad se llama web.config y existe en la raíz del sitio web de SharePoint.

Resolví esto haciendo que la referencia web sea dinámica para mi biblioteca de clases y luego copiando la sección de configuración de applicationSettings que contiene la referencia web del archivo app.config en mi sitio web.config de Sharepoint.

Tenga en cuenta que también deberá copiar la entrada de applicationSettings en su web.config, ya que normalmente no está allí.

Podrías probar esto:En lugar de utilizar la referencia web dinámica, conviértala en una referencia estática para que el código en Reference.cs no busque un valor en el archivo .config para la URL.Luego subclase el código del cliente del servicio web generado y en esa clase derivada, agregue su propia lógica para establecer la propiedad .Url.Luego, VS.NET puede volver a generar Reference.cs todo lo que quiera y su código de configuración de URL permanecerá.Por supuesto, debe actualizar cualquier código posterior para usar su clase derivada, pero debería ser un reemplazo global simple.

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