2012-11-22 15 views
5

हम अपने इवेंटिंग कोड में घटना सदस्यता से सदस्यता छोड़ने की कोशिश कर रहे हैं। हम निम्नलिखित कोडएसडीएल ट्रिडियन इवेंटस्क्रिप्शन अनसब्सक्राइब समस्या

[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(); 
    }} 

क्या हमने देखा है कि एक बार "{} EventSubsciption .Unsubscribe" कहा जाता है का उपयोग कर रहे हैं, इवेंट बाद की घटनाओं जिसके लिए यह काम करने के लिए माना जाता है के लिए काम बंद हो जाता है। एक बार ईवेंट सिस्टम से संबंधित सेवाओं को पुनरारंभ करने के बाद, इवेंटिंग कोड केवल पहली बार अपेक्षित काम करता है और बाद की घटनाओं के लिए कभी भी कॉल नहीं किया जाता है (जिसके लिए इसे काम करना था)।

+1

जब आपके वस्तु की 'निपटान()' विधि शुरू हो जाती है है:

मेरे बॉयलरप्लेट हैंडलर इस तरह दिखता है? जहां तक ​​मुझे पता है यह केवल तभी होना चाहिए जब हैंडलर जो मॉड्यूल चलाता है वह बंद हो जाता है (और संभावित रूप से तब भी नहीं)। –

+0

और यदि आप निपटान नहीं करते हैं() यह अपेक्षा के अनुसार काम करता है? फिर निपटान करना बंद करो? –

उत्तर

1

निपटान विधि को हटाने का प्रयास करें और देखें कि इससे कोई फर्क पड़ता है या नहीं। यह संभव है कि ट्रिडियन इवेंट हैंडलर को किसी ईवेंट के पहले उदाहरण पर तुरंत चालू कर देता है, और फिर सिस्टम को पुनरारंभ होने तक इसे फिर से नहीं करता है। इसलिए यदि आप सदस्यता छोड़ते हैं और निपटान करते हैं, तो आपकी कक्षा फिर से चालू नहीं की जाएगी। यह भी संभव है कि आपके पर्यावरण में कुछ और हस्तक्षेप कर रहा है। कहना मुश्किल है, लेकिन पहले निपटान को हटाकर कोशिश करें।

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! 
     } 

    } 
} 
संबंधित मुद्दे