2012-11-22 6 views
5

Wir versuchen, den EventSubscripton in unserem Evening Code abzubestellen. Wir verwenden den folgenden CodeSDL Tridion EventSubscription Unsubscribe Problem

[TcmExtension("EventHandlerExtension")] 
public class EventHandler : TcmExtension, IDisposable 
{ 
    private EventSubscription componentSaveSubscription = null; 
    private EventSubscription componentPublishSubscription = null; 

    #region Public Methods 
    /// <summary> 
    /// Handle for Eventing System 
    /// </summary> 
    public EventHandler() 
    { 
     Subscribe(); 
    } 
    /// <summary> 
    /// Subscribe Events 
    /// </summary> 
    public void Subscribe() 
    { 
     //News Article Page created when component Save 
     componentSaveSubscription = EventSystem.Subscribe<Component, SaveEventArgs>(OnComponentSavePost, EventPhases.TransactionCommitted); 

     //EventSystem.Subscribe<Component, SaveEventArgs>(OnComponentSavePost, EventPhases.TransactionCommitted); 
     componentPublishSubscription = EventSystem.Subscribe<Component, PublishOrUnPublishEventArgs>(OnComponentPublishOrUnPublishPost, EventPhases.TransactionCommitted); 
     //EventSystem.Subscribe<StructureGroup, PublishOrUnPublishEventArgs>(OnStructureGroupPublishInitiated, EventPhases.TransactionCommitted); 

    } 
    /// <summary> 
    /// IDisposable Implementation 
    /// </summary> 
    public void Dispose() 
    { 

     if (componentSaveSubscription != null) componentSaveSubscription.Unsubscribe(); 
     if (componentPublishSubscription != null) componentPublishSubscription.Unsubscribe(); 
    }} 

Was wir beobachtet haben, ist, dass wenn „{} EventSubsciption .Unsubscribe“ genannt wird, Vielseitigkeits Anschläge für die nachfolgenden Ereignisse arbeiten, für die sie arbeiten soll. Sobald die ereignissystembezogenen Dienste neu gestartet werden, funktioniert der Ereigniscode nur wie erwartet und wird nie für nachfolgende Ereignisse (für die er funktionieren sollte) aufgerufen.

+1

Wenn Ihr Objekt des 'Dispose()' Methode aufgerufen wird? Soweit ich weiß, sollte dies nur passieren, wenn das Modul, in dem der Handler läuft, heruntergefahren wird (und möglicherweise nicht einmal dann). –

+0

Und wenn Sie nicht Dispose() funktioniert es wie erwartet? Dann aufhören zu entsorgen? –

Antwort

1

Versuchen Sie, die Dispose-Methode zu entfernen, um zu sehen, ob dies einen Unterschied macht. Es ist möglich, dass Tridion den Event-Handler bei der ersten Instanz eines Ereignisses instanziiert und dann erst wieder ausführt, wenn das System neu gestartet wird. Wenn Sie sich abmelden und absetzen, wird Ihre Klasse nicht erneut instanziiert. Es ist auch möglich, dass sich etwas anderes in Ihrer Umgebung störend auswirkt. Schwer zu sagen, aber versuchen Sie, zuerst den Dispose zu entfernen.

Mein vorformulierten Handler sieht aus wie:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text.RegularExpressions; 
using Tridion.ContentManager; 
using Tridion.ContentManager.CommunicationManagement; 
using Tridion.ContentManager.ContentManagement; 
using Tridion.ContentManager.ContentManagement.Fields; 
using Tridion.ContentManager.Extensibility; 
using Tridion.ContentManager.Extensibility.Events; 

namespace NicksEventSystem 
{ 
    [TcmExtension("NicksEventSystemExtension")] 
    public class NicksEventHandler : TcmExtension 
    { 
     public NicksEventHandler() 
     { 
      Subscribe(); 
     } 

     private void Subscribe() 
     { 
      EventSystem.Subscribe<Component, FinishActivityEventArgs>(MyEvent, EventPhases.TransactionCommitted); 
     } 

     private void MyEvent(Component wfComponent) 
     { 
      //... Do stuff! 
     } 

    } 
} 
Verwandte Themen