none
Receptor de eventos RRS feed

  • Pregunta

  • Hola a toda la comunidad,

    Tengo un problema, que para mí, no tiene explicación o sentido, y llevo ya día y medio para poder solucionarlo sin éxito, os explico:

    Quiero hacer un receptor de eventos para una biblioteca de documentos en Sharepoint Foundation 2010, ya había hecho antes un receptor de eventos en otro servidor, así que conocia como tenía que hacerlo. El caso es que lo hago desde Visual Studio 2010, selecciono la plantilla de receptor de eventos, el evento "Adding a item" y selecciono el sitio de Sharepoint donde quiero que se instale la caracteristica, hasta aquí todo correcto. Programo el evento y lo despliego, pero cuando me voy a la página en cuestión (debuggeando o sin debuggear) el evento no salta, es decir, no se ejecuta, he probado de todo, poner un punto de interrupción, crear un evento para que falle y me salte el error...pero nada.

    He estado mirando varios foros y páginas de cómo se debe configurar Sharepoint para manejar los eventos, algunas de las páginas son las siguientes:

    http://msdn.microsoft.com/en-us/library/ee231550.aspx

    http://msdn.microsoft.com/en-us/library/ee231604.aspx

    http://www.sharepoint-insight.com/2010/01/14/how-to-debug-email-event-receiver/

    He seguido los pasos al pie de la letra pero no consigo que mi evento salte. El web.config está bien, cuando lo abrí ya tenía puesto CallStack="true", CustomErrors="Off" y compilation debug="true".

    También estaba bien puesto el Active Deployment Configuration, también he comprobado en las características del sitio que me aparecia el receptor de eventos y que, efectivamente, estaba activado.

    No sé que más hacer, ya que en otra web del mismo servidor Sharepoint los eventos me funcionan perfectamente sin ningún problema, así que descarto que sea un problema global de todo el servidor.

    También he de decir que en este mismo site dónde no me funcionan los eventos, me funcionan bien los webparts que he programado en .NET, y puedo debuggearlos sin problemas.

    No sé qué más hacer, si alguien puede darme opciones para ir probando cosas le estaría muy agradecido, ya que estoy muy desesperado, frustrado e impotente ante este problema.

    Muchas gracias y un saludo.


    Sergio Gallego
    miércoles, 3 de noviembre de 2010 9:51

Respuestas

  • Hola Sergio,

    Te comento:

    • Si descomprimes el .wsp generado (cambia la extensión a .cab), verás que contiene entre otros archivos una dll que se corresponde con tu manejador.
    • Esta dll la arrastras a la GAC que está en la siguiente ruta: C:\Windows\assembly. Entonces, arrastra el ensamblado aquí.

    De todas formas, prueba otra cosa antes de hacer lo anterior: despliega el manejador en el sitio en el que si te funcionan los manejadores, añade la entrada del manejador a mano en el Web.Config y prueba a ver si te funciona el manejador.

    Un saludo

    miércoles, 3 de noviembre de 2010 15:17

Todas las respuestas

  • Hola Sergio,

    Por ir acotando el problema:

    • ¿Qué ámbito tiene la feature? Entiendo que has comprobado que la feature se activa y se desactiva sin problemas.
    • Puedes mirar mediante el OM, no te llevará mucho, que el manejador se ha añdido de forma efectiva a la lista.
    • ¿Es el único manejador que tienes en la lista? ¿tienes workflows vinculados?
    • En lugar de hacer la depuración propia de Visual Studio 2010 (pulsando F5), prueba a debuegar atachando Visual Studio 2010 a los worker process de IIS para ver si consigues entrar en modo depuración.
    • ¿Has probado a crear un manejador tonto sobre otra lista para ver si el problema se reproduce?

    Te comento de todos modos que este problema yo lo sufrí antes de la RTM y que no es nuevo. Prueba lo que se comenta en este blog para ver si consigues depurarlo si con los puntos anteriores no tienes suerte: http://blogs.technet.com/b/speschka/archive/2009/12/25/debugging-event-receivers-in-sharepoint-2010.aspx

    Ya nos cuentas!

    Un saludo

    miércoles, 3 de noviembre de 2010 10:33
  • Hola de nuevo Sergio,

    Otro workaroung más, aunque más laborioso, lo tienes aquí:http://pholpar.wordpress.com/2010/02/15/my-event-receiver-doesnt-fire/

    Un saludo

    miércoles, 3 de noviembre de 2010 10:36
  • Hola Juan Carlos, gracias por responder tan rápido,

    Voy diciendote lo que me encuentro:

    -El ámbito que tiene el feature es Web, como todos los receptores de eventos que suelo hacer.

    -Se activa y desactiva sin problemas, a la hora de desactivar te da un aviso, pero al confirmar se desactiva sin problemas, a la hora de activar, se activa sin ningun aviso.

    -He mirado, mediante programación, la cantidad de receptores de eventos que tiene la lista:

    int cuentaEventos=lista.EventReceivers.Count;

    Me dice que tiene 0 receptores de eventos, esto lo he probado, desplegando primero la solución con el receptor de eventos, y luego ejecutando otra solución donde tengo un webpart que realiza acciones sobre la misma lista, en esa solución he metido esa línea de código y al parecer no tiene receptores de evento asociados...aunque no se porqué.

    -He intentado crear un manejador sobre cualquier lista de esa web y ninguno funciona, pero en otra web del mismo servidor si que funciona.

    -Respecto a atachar Visual Studio a los WorkerProcess, he atachado a 2 procesos que se llaman SPUCWorkerProcess.exe y SPUCWorkerProcessPRoxy.exe, pero tampoco salta.

    El segundo enlace que me has enviado (http://pholpar.wordpress.com/2010/02/15/my-event-receiver-doesnt-fire/) ya lo había leido, esto es para crear manualmente un manejador de eventos, ¿verdad?

    Eso aún no lo he probado, ya que me parece demasiado...pero al paso que vamos no sé si será mejor que lo pruebe o que elimine el sitio y vuelva a empezar de 0.

    Esto es desesperante.

    Muchas gracias por tu ayuda

    -He hecho lo que pone en esta página http://blogs.technet.com/b/speschka/archive/2009/12/25/debugging-event-receivers-in-sharepoint-2010.aspx

    pero sin éxito también. Ya lo había probado a mano de todas formas (lo de parar el sptimerv4 y arrancarlo).

     

     


    Sergio Gallego
    miércoles, 3 de noviembre de 2010 11:42
  • Hola Sergio,

    Aunque no es cosa buena, al menos ya parece que sabemos que el problema no está en el manejador, sino en el sitio en cuestión en el que lo estás desplegando. Respecto a tus pruebas:

    • ¿Has probado la WebPart de contar eventos en el sitio en el que si te funcionan? Entiendo que aqui te dirá que si tienes manejadores desplegados.
    • Los manejadores de prueba que has creado en otras listas, ¿para que tipo de evento son?
    • Cuando te decía atachar a los worker process de IIS, me refería a los procesos w3p.exe. Los procesos que me dices son para las soluciones SandBox.
    • El enlace que te paso, te explica dos escenarios. En el primero, como depurar más allá de Visual Studio si un manejador se está lanzando o no. En el segundo, que te recomiendo que pruebes, te da un ejemplo de aplicación de consola para ver los manejadores que tienes registrados.

    Aunque ya lo ponías en tu post anterior, y sobre todo por la cuenta de manejadores = 0, ¿estás seguro que tu solución está apuntando al sitio correcto? Revísalo, no vaya a ser que estés desplegando el manejador en el sitio en el que te funcionan los manejadores.

    Ya me cuentas.

    JC's

    miércoles, 3 de noviembre de 2010 11:59
  • Hola de nuevo Juan Carlos y gracias por tu ayuda,

    He probado el WebPart de contar eventos en la otra web, y sí me funciona, tengo sólo un evento que es el ItemAdding, y la cuenta me dice 1.

    Los manejadores de prueba que he creado son, en principio, ItemAdding también, pero cree más para probar, y aun así nada.

    Lo de atachar a los procesos w3p.exe ya lo había hecho previamente antes de escribir el primer post, ya que lo había leido en algun blog o foro, pero tampoco me saltaban los eventos así.

    La solución si que está apuntando al sitio correcto, de hecho, si creo otros manejadores de eventos en ese mismo sitio, se me añaden a las características posibles que puedo añadir o eliminar en ese sitio.

    ¿Puede ser algún problema del web.config?, ¿o del IIS?

    Estoy pensando seriamente eliminar el sitio por completo y crearlo desde 0, porque esto no es normal y ya estoy perdiendo mucho tiempo en algo que debería ser trivial.

    Si se te ocurre algo más dime, probare a hacer lo de los enlaces que me has mandado.

    Un saludo y gracias de nuevo


    Sergio Gallego
    miércoles, 3 de noviembre de 2010 12:21
  • Buenas Sergio,

    No creo que sea problema del web.config o del IIS. Lo que me mosquea es que en un sitio te funcione y en el otro no:

    • ¿Hay mucha diferencia entre ambos sitios a nivel de configuración?

    Entiendo que has revisado los logs de SharePoint y que no encuentras nada al respecto. Desde luego, si re-crear el sitio no supone un problema en términos de tiempo, yo lo veo como una opción más que interesante ya que las indagaciones que estás haciendo no te están llevando a ninguna parte. Eso sí, intenta antes de dar este paso responder a la pregunta anterior para no caer en el mismo problema.

    Un saludo

    JC's

     

    miércoles, 3 de noviembre de 2010 12:29
  • Hola Juan Carlos,

    Habia mirado los eventos de Sharepoint, pero acabo de mirar los eventos de aplicación de windows y para mi sorpresa me he encontrado con esto:

    Event code: 3008
    Event message: A configuration error has occurred.
    Event time: 03/11/2010 12:03:58
    Event time (UTC): 03/11/2010 12:03:58
    Event ID: a6d3316c62994105b8777dbb98cf08fe
    Event sequence: 8
    Event occurrence: 2
    Event detail code: 0
     
    Application information:
        Application domain: /LM/W3SVC/848719505/ROOT-1-129332592793712410
        Trust level: WSS_Minimal
        Application Virtual Path: /
        Application Path: C:\inetpub\wwwroot\wss\VirtualDirectories\extranetan280\
        Machine name: HSPS2010AN
     
    Process information:
        Process ID: 4912
        Process name: w3wp.exe
        Account name: H\sp10extranetan2svc
     
    Exception information:
        Exception type: ConfigurationErrorsException
        Exception message: Could not load file or assembly 'ReceptorEventosListaRecetas, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8b707e2de5551e2f' or one of its dependencies. Failed to grant minimum permission requests. (Exception from HRESULT: 0x80131417)
     
    Request information:
        Request URL: http://extranetan2/default.aspx
        Request path: /default.aspx
        User host address: 172.16.0.217
        User: H\SPSmossfarmadmin
        Is authenticated: True
        Authentication Type: Negotiate
        Thread account name: H\sp10extranetan2svc
     
    Thread information:
        Thread ID: 8
        Thread account name: H\sp10extranetan2svc
        Is impersonating: True
        Stack trace:    at System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective)
       at System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory()
       at System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai)
       at System.Web.Configuration.AssemblyInfo.get_AssemblyInternal()
       at System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig)
       at System.Web.Compilation.BuildProvidersCompiler..ctor(VirtualPath configPath, Boolean supportLocalization, String outputAssemblyName)
       at System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath)
       at System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile)
       at System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile)
       at System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean noAssert)
       at System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp, Boolean noAssert)
       at System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath)
       at System.Web.HttpApplication.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
       at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
     
     
    Voy a googlear un poco a ver que significa este error, aunque si se te ocurre algo me dices.

    Gracias de nuevo.

     


    Sergio Gallego
    miércoles, 3 de noviembre de 2010 12:46
  • Buenas Sergio,

    Esto ya es otra cosa. Mira un par de cosas:

    • Lo primero, verificar que en la carpeta FEATURE bajo el directorio 14 aparece tu característica y los archivos de manifiesto.
    • Lo segundo, verifica que en la GAC no existe el ensamblado. Si no existe, prueba a añadirlo directamente a mano para ver si está operativo o no.

    Otra pregunta, ¿el sitio con el qué estás trabajando que tipo de acceso tiene? ¿Con qué usuario te estás validando? ¿Qué diferencias tienes a este nivel con el sitio en el que te funcionan los manejadores?

     

    JC's

    miércoles, 3 de noviembre de 2010 12:53
  • Hola Juan Carlos,

    En la carpeta 14, dentro de la carpeta Template, hay una carpeta Features, supongo que te refieres ahi, efectivamente si que aparece la característica y varios archivos, con la fecha y hora de modificación en la que he desplegado la solución.

    Lo de verificar que en el GAC no existe el ensamblado, supongo que te refieres a que lo verifique en el Web.config,¿no?

    En el web.config no encuentro nada referente a los eventos, si no te refieres a eso echame una mano, porque estoy un poco perdido.

    El acceso que tiene el sitio que estoy trabajando es autenticación windows con Kerberos. El usuario con el que me estoy validando es Cuenta del sistema, pero he probado con un usuario normal y con un usuario con control total.

    El sitio donde me funcionan los manejadores esta configurado igual.

    He vuelto a revisar los eventos de sharepoint y sigo sin encontrar nada raro, primero hace el retract del receptor de eventos y luego lo vuelve a implementar, estoy googleando para ver la solución al evento que he encontrado pero no hay nada claro...a ver si con lo que me digas del GAC avanzamos algo.

    Gracias nuevamente y un saludo


    Sergio Gallego
    miércoles, 3 de noviembre de 2010 13:10
  • Buenas Sergio,

    Por lo que me dices, la feature se despliega pero "a medias" ya que no mete nada en la GAC ni en el Web.Config. Te diría que hagas lo siguiente:

    • Añadir en el Web.Config la misma linea que registra tu manejador de eventos en el sitio en el que si te funciona.
    • Copiar a mano el ensamblado del manejador en la GAC.

    Prueba si te funciona ahora el manejador.

    JC's

    miércoles, 3 de noviembre de 2010 13:23
  • Hola Juan Carlos,

    No entiendo muy bien lo de copiar a mano el ensamblado del manejador en la GAC.

    ¿como puedo acceder a la GAC?

    ¿Cual es el ensamblado que tengo que meter?

    Gracias


    Sergio Gallego
    miércoles, 3 de noviembre de 2010 13:31
  • Hola Sergio,

    Te comento:

    • Si descomprimes el .wsp generado (cambia la extensión a .cab), verás que contiene entre otros archivos una dll que se corresponde con tu manejador.
    • Esta dll la arrastras a la GAC que está en la siguiente ruta: C:\Windows\assembly. Entonces, arrastra el ensamblado aquí.

    De todas formas, prueba otra cosa antes de hacer lo anterior: despliega el manejador en el sitio en el que si te funcionan los manejadores, añade la entrada del manejador a mano en el Web.Config y prueba a ver si te funciona el manejador.

    Un saludo

    miércoles, 3 de noviembre de 2010 15:17
  • Hola Juan Carlos,

    Respecto al web.config del site que sí me funciona, no me añade nada al desplegar el manejador de eventos, es decir, que esta igual que antes de desplegarlo, voy a revisarlo mejor, pero he estado buscando por el nombre del manejador de eventos, y nada no lo he encontrado.

    De todas formas he visto una cosa curiosa que puede que tenga mucho que ver:

    Estaba probando el tema de los eventos en la página que sí me funciona, el caso es que yo quiero que mi evento actue cuando intento agregar un nuevo documento a una biblioteca de documentos, pero en ese caso no me salta.

    ¿Es posible que no se puedan enlazar eventos a una biblioteca de documentos?

    En listas de tareas, anuncios y demás si que me salta bien el evento, pero en las bibliotecas de documentos no...

    Graciasy un saludo


    Sergio Gallego
    miércoles, 3 de noviembre de 2010 15:40
  • Hola Juan Carlos,

    En cuanto te he escrito el anterior post, me he dado cuenta de lo torpe que soy...

    Estaba realizando el eventReceiver en listas de anuncios, y no en Document Library, asi que he creado un nuevo receptor de eventos de Document Library y ha funcionado a la primera.

    Siento mucho todo este trajín, para algo que funcionaba desde el principio, perdona si te he hecho perder el tiempo, y te agradezco muchisimo tu ayuda.

    Un saludo


    Sergio Gallego
    miércoles, 3 de noviembre de 2010 15:51
  • Buenas Sergio,

    Listo encontes...no te preocupes, que no he perdido nada de tiempo y me alegro que por lo menos haya servido para que te hayas dadao cuenta del problema.

    Un saludo

    miércoles, 3 de noviembre de 2010 16:06
  • Hola Juan Carlos,

    De nuevo muchas gracias, la próxima vez no me pasara algo parecido, revisaré que hago las cosas bien, a veces el ser nuevo en Sharepoint hace que cosas tan sencillas te cueste darte cuenta de donde esta el problema.

    Un saludo


    Sergio Gallego
    miércoles, 3 de noviembre de 2010 16:08
  • Hola Sergio,

    por si te sirve de ayuda para la próxima vez, en codeplex hay un proyecto SharePoint Manager (http://spm.codeplex.com/) que te permite examinar tu SharePoint comprobando que los deploy y los objetos están como tienen que estar.

     


    Alberto Diaz Martin twitter://@adiazcan | http://geeks.ms/blogs/adiazmartin
    jueves, 4 de noviembre de 2010 0:10