2013-02-18 14 views
7

पर सिग्नलआर डिस्कनेक्ट नहीं किया जा रहा है, मैं अपने ऐप में सिग्नलआर का उपयोग कर रहा हूं। मेरे पास एक ऐप है जो OnDisconnected() पर बहुत अच्छी डिग्री पर निर्भर करता है। और यह निम्न परिस्थितियों में सही ढंग से कहा जाता है:इंटरनेट डिस्कनेक्शन/री-कनेक्शन

public Task OnDisconnected() 
{ 
    try 
    { 
     DeleteUser(Context.ConnectionId); 
     return null; 
    } 
    catch (Exception ex) 
    { 
     return null; 
    } 
} 
  1. उपयोगकर्ता एक नया पृष्ठ
  2. उपयोगकर्ता ब्राउज़र बंद कर देता

हालांकि करने के लिए पेज

  • उपयोगकर्ता नेविगेट करता ताज़ा करता है, यह नहीं कहा जाता है कि नेटवर्क कनेक्शन अचानक गिरता है। उदाहरण के लिए, यदि मैं क्लाइंट मशीन पर नेटवर्क केबल को अनप्लग करता हूं, या क्लाइंट के वायरलेस नेटवर्क को अक्षम करता हूं, या राउटर को अनप्लग करता हूं, तो OnDisconnected() कई मिनट प्रतीक्षा के बाद भी कभी नहीं बुलाया जाएगा।

  • +0

    मैंने साइनलआर के साथ बहुत काम किया है, लेकिन मुझे यकीन है कि यह इसकी कार्यक्षमताओं में से एक नहीं है, अगर उपयोगकर्ता अभी भी एक केंद्र से जुड़ा हुआ है। आप अपना खुद का टाइमर लागू करना चाहते हैं जो उपयोगकर्ता को (x) मिनटों के बाद लॉग आउट करेगा। – Timsen

    +0

    बस इस लिंक पर फेल हो गया है, यह आपके लिए उपयोगी हो सकता है: http://www.dotnetcurry.com/ShowArticle.aspx?ID=826 – Timsen

    उत्तर

    6

    यह डिस्कनेक्ट हो जाएगा लेकिन तुरंत नहीं। कॉन्फ़िगर करने योग्य थ्रेसहोल्ड (डिफ़ॉल्ट रूप से 30 सेकंड) है कि सिग्नलर क्लाइंट डिस्कनेक्ट होने पर विचार करने से पहले प्रतीक्षा करेगा (अंतर्निहित टीसीपी कनेक्शन समाप्त हो गया है और यह तत्काल नहीं है)। यदि कनेक्शन कॉन्फ़िगर किए गए टाइमआउट से पहले ड्रॉप हो जाता है और फिर से कनेक्ट होता है तो यह ऑनडिस्कनेक्टेड नहीं बढ़ाएगा।

    यदि आप थोड़ी देर इंतजार करने के बाद इसे किसी परिदृश्य में कभी नहीं उठा रहे हैं तो यह एक बग हो सकता है। सिग्नलआर 1.0 आज जारी किया गया था इसलिए मैं आपको यह भी कोशिश करने के लिए प्रोत्साहित करता हूं और देखता हूं कि क्या आपको अभी भी समस्या दिखाई दे रही है या नहीं।

    +0

    ठीक धन्यवाद dfowler..i सिग्नल आर 1.0 का उपयोग करेगा, अब मैं सिग्नल आर का उपयोग कर रहा हूं 0.5.3 – user1527989

    +1

    डेविड, क्या हम एएसपी.NET 4.5 + आईआईएस 8.0 के तहत सिग्नलआर होस्ट कर रहे हैं, तो 'HttpContext.Response.ClientDisconnectedToken' सम्मानित है? – tugberk

    +2

    हम इसका उपयोग नहीं करते क्योंकि इसमें एक बग है। लेकिन जब यह तय हो जाता है तो हम इसका इस्तेमाल करेंगे। – davidfowl

    2

    यह सही जवाब नहीं हो सकता है लेकिन यह जो मैं जानता हूँ है:

    आप को देखने के लिए OnDisconnected घटना अचानक निकाल दिया जब कनेक्शन हटा दिया गया है क्योंकि SignalR इसे नीचे ट्रैक नहीं करता है में सक्षम नहीं होगा (यह पृष्ठभूमि कार्य के संबंध में पूल देखने के लिए कि क्या एक निश्चित अंतराल के भीतर कनेक्शन मर चुका है)। जब आप ब्राउज़र बंद करते हैं, तो मुझे लगता है कि सिग्नलर डिस्कनेक्ट ईवेंट को सिग्नल करने के लिए सर्वर से अनुरोध भेजता है। यही कारण है कि आप अचानक घटना को निकाल दिया।

    हालांकि, एएसपी.NET 4.5 में CancellationToken संपत्ति ClientDisconnectedTokenHttpContext.Response है जिसे टीसीपी कनेक्शन छोड़ने पर संकेत दिया जाता है। यह केवल आईआईएस 8.0 के तहत काम करता है जहां तक ​​मुझे पता है और मुझे यकीन नहीं है कि सिग्नल इसके साथ .NET 4.5 ASP.NET होस्ट के अंतर्गत काम करता है या नहीं।

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