2014-07-22 6 views
13

मैं वर्तमान में सिग्नल (2.1) हब्स का उपयोग कर एक आवेदन विकसित कर रहा हूं।सिग्नलआर: सी # ग्राहकों में जीवित कनेक्शन का पता लगाने

मेरे पास 1 डब्ल्यूपीएफ क्लाइंट है और दूसरा डब्लूसीएफ क्लाइंट है। सब ठीक काम करता है कि वे संदेशों को पूरी तरह से पारित कर रहे हैं।

अब मुझे सामना करने वाली एकमात्र समस्या यह है कि मैंने देखा कि जब ऑटो-रीस्टार्ट, डब्ल्यूसीएफ सर्वर नीचे चला गया और कुछ अन्य कारणों से एप्लिकेशन बंद हो जाता है तो ऑनडिस्कनेक्टेड को निकाल दिया नहीं जाता है। टाइमआउट 30 सेकंड का डिफ़ॉल्ट है। 1 दिन बीत जाने के बाद भी इसे कभी नहीं कहा जाता है (मैंने कोशिश की)। हालांकि, टाइम क्लाइंट वेब क्लाइंट्स के लिए काम करता है।

यह केवल काम करता है जब मैं hub.connection.stop फोन()।

Ondisconnected विधि हालांकि बहुत अच्छी तरह से जब ग्राहक एक ब्राउज़र है काम करता है।

इस प्रकार, मैं पूछने के लिए सिग्नल आर हब पक्ष के लिए किसी भी तरह से है कि ग्राहक अभी भी जुड़ा हुआ है या पहले से ही (जैसे एक पिंग) की पढ़ाई छोड़ दी है की जाँच करने में सक्षम होना है कि क्या वहाँ चाहते हैं?

+1

1) आपको .net सिग्नल क्लाइंट के लिए github पर एक बग फाइल करना चाहिए (या शायद वे एक बग है?)। 2) आप अपने स्वयं के पिंग तंत्र को आसानी से कार्यान्वित कर सकते हैं, ग्राहकों और हबों के बीच तंत्र भेजकर –

+0

ठीक है, मैंने कहकर इस पाठ को पढ़ और नोटिस किया है "यदि आपके वेब सर्वर काम करना बंद कर देते हैं या एप्लिकेशन पुनरारंभ होता है, तो ऑनडिस्कनेक्टेड विधि को कॉल नहीं किया जाता है इसलिए, यह संभव है कि आपके डेटा भंडार में कनेक्शन आईडी के लिए रिकॉर्ड होंगे जो अब वैध नहीं हैं। " http://www.asp.net/signalr/overview/signalr-20/hubs-api/mapping-users-to-connections में। इस प्रकार, मुझे पता है कि वे इसके बारे में जानते हैं।लेकिन, मेरा सवाल यह है कि क्या सिग्नलआर हब के लिए कोई भी अंतर्निहित तरीका है, अगर मुझे हर दो सेकंड पिंग करने के बजाय कनेक्शन गिरा दिया गया है। – Kiong

उत्तर

23

SignalR 2.1.0 में, वहाँ एक new overload to OnDisconnected कि एक bool यह बताते हैं कि ग्राहक शान या नहीं काट दिया जाता है। इस परिवर्तन के पीछे तर्क 2.1.0 release notes के "ब्रेकिंग चेंज" खंड में समझाया गया है।

आपका नया OnDisconnected विधि कुछ इस तरह दिखाई दे सकता है:

public override Task OnDisconnected(bool stopCalled) 
{ 
    if (stopCalled) 
    { 
     // We know that Stop() was called on the client, 
     // and the connection shut down gracefully. 
    } 
    else 
    { 
     // This server hasn't heard from the client in the last ~35 seconds. 
     // If SignalR is behind a load balancer with scaleout configured, 
     // the client may still be connected to another SignalR server. 
    } 

    return base.OnDisconnected(stopCalled); 
} 

वर्ष OnDisconnected विधि है कि एक bool नहीं ले करता है, गैर सुंदर डिस्कनेक्ट करने का आह्वान नहीं किया गया है, इसलिए यदि आप उस घटना का उपयोग कर रहे हैं, कि आप जो समस्या देख रहे हैं उसे समझा सकते हैं।

2.1.0 से पहले, (केवल) ऑनडिस्कनेक्टेड विधि जो पैरामीटर नहीं लेती थी, दोनों को और दोनों गैर-सुंदर डिस्कनेक्ट के लिए बुलाया गया था। चूंकि व्यवहार में इस बदलाव ने several reported issues का कारण बना दिया है, पुराना ऑनडिस्कनेक्टेड ओवरलोड is being removed in SignalR's upcoming 2.1.1 release

इस अनुप्रयोग जो SignalR के पुराने OnDisconnected विधि का उपयोग करें जब SignalR 2.1.1 के खिलाफ बनाया संकलित करने के लिए विफल हो जाएगा। हालांकि यह आदर्श नहीं है, यह आशा करता है कि डेवलपर्स को इस ब्रेकिंग चेंज के बारे में पता चलेगा ताकि उनके पास तैनात करने से पहले अपने ऐप्स को उचित रूप से संशोधित करने का अवसर हो।

+0

बिल्कुल सही। मैंने अभी परीक्षण किया और हाँ। यह फायरिंग है। महोदय आपका बहुत बहुत धन्यवाद! – Kiong

+0

halter73, धन्यवाद। मुझे छोटी गलती मिली। अगर मैं अगली पंक्ति में "वर्चुअल" का उपयोग करता हूं तो ऑन डिस्कनेक्टेड विधि आग नहीं होती है: सार्वजनिक वर्चुअल टास्क ऑन डिस्क्लेक्टेड (बूल स्टॉप कैल्ड) मैं "वर्चुअल" के बजाय "ओवरराइड" का उपयोग करता हूं और यह काम करता है। –

+0

धन्यवाद। मैंने अपना जवाब तय कर दिया। – halter73

0

मैंने पाया कि मेरी ग्राहक अगर मैं सर्वर मजबूर कनेक्शन बंद करने के लिए पुन: कनेक्ट नहीं होगा। (मैं एक WSSockets त्रुटि मिलती चाहते हैं)

तो, मेरे लिए, ठीक था:

con = new HubConnection(_url); 
con.Error += (exception) => Error(exception); 
con.Start(); 

तो, त्रुटि विधि में, प्रयास उपरोक्त कोड को फिर से फोन करके फिर से कनेक्ट करने के लिए।

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