2010-05-07 15 views
5

मेरे पास एक डब्ल्यूसीएफ एप्लीकेशन है जो सत्रों का उपयोग कर रहा है।डब्ल्यूसीएफ: सत्र समाप्त होने पर कैसे पता लगाना है?

क्या सत्र समाप्त होने पर फेंकने के लिए कोई केंद्रीय कार्यक्रम है? जब कोई सत्र (!) बिना किसी विधि को कॉल कर रहा है (नेटवर्क डिस्कनेक्ट, क्लाइंट क्रैशिंग - तो नहीं "लॉगआउट" विधि कॉल) जब कोई सत्र समाप्त हो रहा है, तो मैं कैसे पता लगा सकता हूं? क्योंकि यह एक कॉलबैक इंटरफ़ेस का उपयोग कर रहा है

[ServiceBehavior(
    InstanceContextMode = InstanceContextMode.PerSession, 
    ConcurrencyMode = ConcurrencyMode.Reentrant, 
    UseSynchronizationContext = false, 
    IncludeExceptionDetailInFaults = true 
)] 

असल:

सर्वर के रूप में होस्ट की है।

अब, मैं मूल रूप से बैकएंड दुकान जब सत्र समाप्त हो जाता है से बनाए गए उदाहरण decoubple करने की जरूरत है;)

कोई भी विचार?

उत्तर

4

वहाँ एक अच्छा उदाहरण संदर्भ से CommunicationObject

संचार वस्तु से here

उदाहरण संदर्भ निकला है वर्णन किया गया है एक closing घटना है।

मैंने यह स्वयं नहीं किया है, लेकिन सिद्धांत में इस घटना का उपयोग करके इस सत्र में बैकएंड स्टोर से हटने के लिए संभव होना चाहिए।

-1

सेट करें कि आप टाइमआउट मान सेट करें और एक पिंग सेवा() विधि बनाएं जो टाइमआउट समाप्त होने से पहले ही आग लगती है, यह भेजें और प्राप्त करें टाइमआउट रीसेट करेगा।

यदि आप टाइमआउट को पकड़ना चाहते हैं तो बस कॉलबैक का प्रयास करें, यदि प्रयास बाध्यकारी SendTimeout मान (डिफ़ॉल्ट 1 मिनट मुझे लगता है) से अधिक समय लेता है, तो आप टाइम-आउट त्रुटि फेंक देंगे और आप संसाधित कर सकते हैं डिस्कनेक्ट।

(, बिजली बाहर चला जाता है, आदि, आदि, आदि ब्राउज़र का क्रैश)

+0

खराब उत्तर - मेरे पास पहले से ही है (प्रति सेकंड पिंग इत्यादि) - किसी ग्राहक को नेटवर्क या बिजली के नुकसान या किसी चीज़ पर टाइमआउट के कारण डीएडी जाने से नहीं रोकता है, और यह वही है जो मैं चाहता/पकड़ने की जरूरत है (मुझे पता होना चाहिए कि कनेक्शन कब मर चुका है/सत्र समाप्त हो गया है)। यहां कोई ब्राउजर भी शामिल नहीं है (क्यों बिल्ली हर कोई सोचता है कि एक वेब सेवा एक बेवकूफ उबाऊ वेबसाइट है?)। यहां कोई ग्राहक पक्ष शामिल नहीं है - मेरा प्रश्न 100% सर्वर पक्ष है। -1। – TomTom

+0

आप इसे आजमा सकते हैं: callbackClient.opContext.Channel.State। – DavyMac23

8
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] 
class MyService : IService 
{ 
    public MyService() 
    { 
     // Session opened here 
     OperationContext.Current.InstanceContext.Closed += InstanceContext_Closed; 
     // get the callback instance here if needed 
     // OperationContext.Current.GetCallbackChannel<IServiceCallback>() 
    } 

    private void InstanceContext_Closed(object sender, EventArgs e) 
    { 
     // Session closed here 
    } 
} 

कोड सिंगल/PerCall InstanceContextMode लिए काम नहीं करेगा कोई रास्ता शान से डिस्कनेक्ट उपयोगकर्ता को पकड़ने के लिए नहीं है।

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