Respuesta

13

Esto es realmente posible, pero que no implica el archivo Global.asax.

Muchos de los ejemplos de Microsoft demuestran el código de cableado a través de Global.asax, pero este no es un enfoque de mejores prácticas cuando se trata de SharePoint. Idealmente, su código debe empaquetarse como una característica y desplegarse a través de WSP (como ya sabe).

La clave está en implementar el código en cuestión como un HttpModule (es decir, un tipo que implementa la interfaz IHttpModule) y cablearlo en la tubería ASP.NET que da servicio a su aplicación SharePoint. A grandes rasgos, estos son los pasos:

  1. Cree una clase que implemente la interfaz IHttpModule.
  2. Implemente el método Init en su HttpModule; esto se llama cuando la aplicación Http (en este caso, la aplicación SPHttp) está configurada, y le da la oportunidad de llevar a cabo procesadores, delegados de evento cableados para otros eventos de canalización, etc.
  3. Cree un SPFeatureReceiver que agregará y elimine su HttpModule de los archivos web.config de destino en activación y desactivación, respectivamente. Esto se lleva a cabo utilizando el tipo SPWebConfigModification para actualizar el nodo <httpModules> en los archivos target web.config.
  4. Paquete todo como una característica y despliegue a través de WSP.

Para obtener más información sobre el desarrollo de HttpModule, consulte http://msdn.microsoft.com/en-us/library/ms227673.aspx. Para obtener más detalles sobre el tipo SPWebConfigModification, consulte http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spwebconfigmodification.aspx.

Resultado: una clase que puede manejar el inicio de la aplicación y se puede implementar a través de la característica. No es necesario hackear archivos manualmente.

He utilizado esto con éxito en una serie de escenarios, más recientemente con un proveedor de caché personalizado (IVaryByCustomHandler) que necesitaba registrarse para las devoluciones de llamada con SPHttpApplication cuando se inició.

Aunque su pregunta es un poco más antigua, ¡espero que esto ayude!

3

Mi instinto en este sentido es que no será posible. Application_Start es invocado por el motor de ejecución cuando el motor asp.net se está iniciando, por lo que es muy probable que no haya forma de conectar el controlador fuera de la modificación de Global.asax, p. el gancho debe ser declarativo y persistente, ya que debe sobrevivir a la detención/descarga de la aplicación. Entonces, si tiene que escribir en global.asax, supongo que podría escribir un Feature EventReceiver para realizar la modificación.

Dejando eso de lado, ¿puedes dar más detalles sobre por qué? Quizás haya otros ángulos de ataque. La idea de modificar el archivo.asax global sobre la marcha me hace sentir mal. Eso no puede ser bueno.

Oisin

Cuestiones relacionadas