Fehler beim Registrieren der Sharepoint WebDeleting Ereignisempfänger in einigen Umgebungen

StackOverflow https://stackoverflow.com/questions/2429159

  •  19-09-2019
  •  | 
  •  

Frage

Ich versuche, einen WebDeleting Ereignisempfänger innerhalb von Sharepoint zu registrieren. Dies funktioniert gut in meiner Entwicklungsumgebung, aber nicht in mehr Staging-Umgebungen. Der Fehler, den ich zurück ist „Wert nicht innerhalb des erwarteten Bereichs.“. Hier ist der Code, den ich verwenden:

SPSecurity.RunWithElevatedPrivileges(delegate()
{
    using (SPSite elevatedSite = new SPSite(web.Site.ID))
    {
        using (SPWeb elevatedWeb = elevatedSite.OpenWeb(web.ID))
        {
            try
            {
                elevatedWeb.AllowUnsafeUpdates = true;
                SPEventReceiverDefinition eventReceiver = elevatedWeb.EventReceivers.Add(new Guid(MyEventReciverId));
                eventReceiver.Type = SPEventReceiverType.WebDeleting;
                Type eventReceiverType = typeof(MyEventHandler);
                eventReceiver.Assembly = eventReceiverType.Assembly.FullName;
                eventReceiver.Class = eventReceiverType.FullName;
                eventReceiver.Update();
                elevatedWeb.AllowUnsafeUpdates = false;
            }
            catch (Exception ex)
            {
                // Do stuff...
            }
        }
    }
});

Ich weiß, dass ich dies durch eine Funktion Elementdatei tun (ich versuche, diesen Ansatz jetzt), aber würde es vorziehen, den oben beschriebenen Ansatz zu verwenden.

Die Fehler, die ich konsequent in den ULS-Protokolle erhalten sind:

03/11/2010 17:16:57.34  w3wp.exe (0x09FC)                           0x0A88  Windows SharePoint Services     Database                        6f8g    Unexpected  Unexpected query execution failure, error code 3621. Additional error information from SQL Server is included below. "The statement has been terminated." Query text (if available): "{?=call proc_InsertEventReceiver(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}"  
03/11/2010 17:16:57.34  w3wp.exe (0x09FC)                           0x0A88  Windows SharePoint Services     General                         8e2s    Medium      Unknown SPRequest error occurred. More information: 0x80070057   

Irgendwelche Ideen?


UPDATE - Einige interessante Dinge, die ich gelernt habe ...

Ich änderte meinen Code Folgendes zu tun:

  • Ich nenne EventReceivers.Add () ohne die GUID, da die meisten Beispiele, die ich sehe nicht tun, dass
  • gab den Ereignisempfänger einen Namen und Sequenznummer, da die meisten Beispiele, sehe ich, dass

ich diese Änderung im Einsatz zusammen mit einigen zusätzlichen Trace-Anweisungen, die zu den ULS-Protokollen gehen und nach genug iisresets tun und dem Löschen des GAC meiner Versammlung, begann ich meine neue Trace-Anweisungen in den ULS-Protokollen zu sehen und ich habe nicht mehr die Fehler!

So begann ich zu meinem ursprünglichen Code zurück zu gehen, um zu sehen, was genau geholfen ändern. Ich endlich mit der Originalversion in der Quellcodeverwaltung beendet und es immer noch gearbeitet. ES

So ist die Antwort klar, dass es einige Caching-Problem. Allerdings, als ich ursprünglich wollte, um es zu arbeiten, ich IISRESETs versuchte, einige Sharepoint-Dienste OWSTimer Neustart (this, I läuft das Event Hander glauben, aber wahrscheinlich nicht in der Event-Registrierung beteiligt, wo ich die Störung erhalte) und sogar ein Neustart, um sicherzustellen, keine Montage Cachen vorging -. und das hat nicht geholfen, bevor

Das einzige, was ich muss weitergehen wird vielleicht wie folgt wie:

  1. Deaktivieren Sie das GAC der Assembly, die den Registrierungscode und Event Hander-Klasse enthält.
  2. Sie ein IISRESET.
  3. Deinstallieren der WSP.
  4. Sie ein IISRESET.
  5. Installieren Sie das WSP.
  6. Sie ein IISRESET.

es zum Laufen zu bringen habe ich nie einen Neustart oder neu gestartet Sharepoint-Dienste tat, aber ich hatte jene vor immer daran zu arbeiten (vor dem Wechsel meinen Code).

getan

Ich glaube, ich könnte mehr mit Reflektor graben, um zu sehen, was ich finden kann, aber ich glaube, dass Sie in eine Sackgasse (nicht verwalteten Code) bekommen ziemlich schnell. Ich frage mich, was die alte DLL könnte festhalten? Ich kann mir nicht vorstellen, dass SQL Server in irgendeiner Weise sein würde. Trotzdem wäre ein Neustart festgelegt, dass (die gesamte Farm, einschließlich SQL Server auf der gleichen Maschine in dieser Umgebung).

War es hilfreich?

Lösung

Also, es scheint, dass das ganze Problem der Ereignisempfänger war die Schaffung von der GUID bereitstellt.

EventReceiverDefinition eventReceiver = elevatedWeb.EventReceivers.Add(new Guid(MyEventReciverId));

Jetzt mache ich:

EventReceiverDefinition eventReceiver = elevatedWeb.EventReceivers.Add();

Leider bedeutet dies, wenn ich will, um herauszufinden, ob das Ereignis bereits registriert ist, ich so etwas wie der Code tun muss unter anstelle eines einzigen Einzeiler.

// Had to use the below instead of: web.EventReceivers[new Guid(MyEventReceiverId)]
private SPEventReceiverDefinition GetWebDeletingEventReceiver(SPWeb web)
{
    Type eventReceiverType = typeof(MyEventHandler);
    string eventReceiverAssembly = eventReceiverType.Assembly.FullName;
    string eventReceiverClass = eventReceiverType.FullName;

    SPEventReceiverDefinition eventReceiver = null;

    foreach (SPEventReceiverDefinition eventReceiverIter in web.EventReceivers)
    {
        if (eventReceiverIter.Type == SPEventReceiverType.WebDeleting)
        {
            if (eventReceiverIter.Assembly == eventReceiverAssembly && eventReceiverIter.Class == eventReceiverClass)
            {
                eventReceiver = eventReceiverIter;
                break;
            }
        }
    }

    return eventReceiver;
}

Es ist immer noch nicht klar, warum die Dinge zu verweilen schienen und erfordert eine gewisse Bereinigung (iisreset, Neustarts, etc.) so, wenn jemand dieses Problem keep hat, dass im Auge behalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top