2013-07-23 6 views
9

मैं सिग्नलआर (jquery.signalR-2.0.0-beta2.js) के आधार पर रीयल-टाइम मैसेजिंग सिस्टम के साथ एएसपीनेट एमवीसी एप्लीकेशन विकसित करता हूं। समस्या यह है कि सिग्नल कनेक्शन शुरू होने के बाद सभी आंशिक विचार लोड नहीं किए जा सकते हैं। इस मामले में $ .connection.hub.start ({transport: 'longPolling'} के बाद सभी AJAX अनुरोध)। (फ़ंक्शन() { applicationHub.server.connectUser(); }) लंबित स्थिति में रहें। क्या यह अनुरोध एसिंक को बनाने के लिए सकारात्मक है या क्या यह सिग्नलआर में एक बग है? आपकी सहायताके लिए धन्यवाद!सिग्नलआर कनेक्शन अन्य AJAX अनुरोधों को फ्रीज करें

SignalR कॉल:

<script type="text/javascript"> 

    $(document).ajaxStop(function() { 
     var applicationHub = $.connection.applicationHub; 

     if ($.connection.hub && $.connection.hub.state == $.signalR.connectionState.disconnected) { 

      registerConversationClientMethods(applicationHub); 

      $.connection.hub.start({ transport: 'longPolling'}).done(function() { 
       applicationHub.server.connectUser(); 
      }) 
      .fail(function() { 

      }); 
     } 
    }); 
</script> 

अजाक्स कॉल जो एक आंशिक दृश्य प्रस्तुत करता है:

समारोह LoadActivities (आईडी, प्रकार, कंटेनर, एक्शन, loaderpath) {

var url = action + '/?id=' + id + '&type=' + type; 
var targetDiv = container; 
var ajaxLoading = "<img id='ajax-loader' src='" + loaderpath + "' height='6' width='50' style='margin:5px;'>"; 

$(targetDiv).html("<div align='center'>" + ajaxLoading + "</div>"); 

$.get(url, null, function (result) { 
    $(targetDiv).html(result); 
}); 

}

+0

आप आईओएस का उपयोग कर रहे ? क्या यह मुद्दा है? https://github.com/SignalR/SignalR/issues/1406 –

+0

नहीं, मैं विंडोज 7 का उपयोग कर रहा हूं। आपके मुद्दे में समान व्यवहार है लेकिन यह वह नहीं है जिसे मैं समझ रहा हूं। सिग्नलआर के अजाक्स अनुरोध शुरू होने के बाद सभी एसिंक एजेक्स अनुरोध लंबित राज्य में रहते हैं (मतदान? परिवहन = लांगपॉलिंग और कनेक्शन टोकन = 1 केपीएक्स% 2 बी 72 ...) जिसमें लंबित राज्य भी है (जैसा कि यह होना चाहिए)। – Alliancer

+0

विंडोज 7 + पूर्ण आईआईएस (आईआईएस एक्सप्रेस नहीं) की समवर्ती कनेक्शन सीमा 10 है। क्या आप पूर्ण आईआईएस का उपयोग कर रहे हैं? – davidfowl

उत्तर

1

@ bjornhol के उत्तर को थोड़ा और आगे लेना - सभी सिग्नलआर अनुरोधों (जो अधिक AJAX लोड कर रहे थे) का एक ही मुद्दा मेरे साथ भी हो रहा था। मैंने सोचा कि यह jQuery था जो मुद्दा था लेकिन वास्तव में यह सत्र राज्य है। उस नियंत्रक के लिए यदि आप सत्रस्टेटबेहायर को केवल पढ़ने या अक्षम करने के लिए सेट कर सकते हैं तो आप अनुरोधों को एक साथ देख सकते हैं। कृपया यह लिंक भी देखें http://johnculviner.com/asp-net-concurrent-ajax-requests-and-session-state-blocking/ आशा है कि इससे मदद मिलती है।

5

मेरे पास समस्या का कारण बनने के लिए एक और स्पष्टीकरण है।

चूंकि प्रश्न 2013 में पूछा गया था, मुझे लगता है कि लेखक को पहले से ही उसकी समस्या का समाधान मिला है। लेकिन चूंकि मुझे मेरे खोदने में कई घंटे लग गए, मुझे विश्वास है कि मेरा अनुभव साझा करना मेरा कर्तव्य है।

आर्किटेक्चर अवलोकन: क्लाइंट साइड और वेबएपी 2.0 पर एंगुलरजेएस के साथ Asp.Net SPA एप्लिकेशन और सर्वर पक्ष पर सिग्नल 2.1।

समस्या लक्षण: एप्लिकेशन प्रारंभ होता है और सामान्य रूप से कार्य करता है लेकिन कुछ समय बाद सभी अनुरोध (सिग्नलआर और वेबएपी) अटक जाते हैं। 'अटक' से मेरा मतलब है कि क्लाइंट पर वेबएपी अनुरोध किए जा रहे हैं लेकिन नियंत्रक विधियों को कभी नहीं बुलाया जाता है। जमे हुए पाने वाला पहला व्यक्ति हमेशा सिग्नल अनुरोध है।

Network Monitor

कुछ खोज करने के बाद मैं इन लक्षणों के लिए सबसे संभावित कारण मिल गया है। यह this post by John Culviner में विस्तार से वर्णित "सत्र राज्य अवरोध" मुद्दा था।

के बाद से अपने आवेदन सत्र मैं बस उन्हें बंद का उपयोग नहीं किया गया था केवल पढ़ने के लिए आवेदन स्तर पर मोड:

protected void Application_Start() 
{ 
    // Some extra initialization here 
    Context.SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.ReadOnly); 
} 

यह मदद नहीं की।

मैं अपने अनुसंधान जारी रखा और मुझे विश्वास है कि उस समय तक मैं खोजशब्दों साथ हर लेख या बग रिपोर्ट SignalR, कनेक्शन, रुक जाता है फ्रीज, लटका पढ़ा है। मेरे मामले से कुछ भी संबंधित नहीं लग रहा था।तो खोज के बजाय तकनीक में समस्या के साथ समस्या क्या हो सकती है, मैंने विश्लेषण करना शुरू किया कि मेरे अपने कोड के साथ क्या गलत हो सकता है। और वहां था।

मेरी समस्या का इस article by Shaun में एक अच्छा विवरण है। यहां अवलोकन है। मानक एमवीसी दुनिया में सिग्नल अपने कनेक्शन का प्रबंधन करता है। जब आप दूसरे पृष्ठ पर जाते हैं तो यह स्वचालित रूप से डिस्कनेक्ट हो जाएगा। तो आप बस कनेक्शन बना सकते हैं और इसके बारे में भूल सकते हैं। दुर्भाग्य से यह एसपीए/AngularJS अनुप्रयोगों के लिए सच नहीं है। सिग्नलआर कनेक्शन कभी नहीं जानता कि एसपीए के अंदर का पृष्ठ बदल दिया गया था और कभी भी डिस्कनेक्ट नहीं होगा। जब आप पृष्ठ पर वापस आते हैं तो एक नया सिग्नल कनेक्शन बनाया जाएगा। मेरे अवलोकन में आपको पाइप बनाने के लिए इसे लगभग 10 बार करने की आवश्यकता है जो अनुरोधों को पूरा करता है।

तो सब तुम यहाँ क्या करना है SignalR कनेक्शन के लिए एक बंद समारोह बनाने और स्पा के अंदर पेज बदलने से पहले मैन्युअल रूप से इसे बुला रहा है:

stop: function() { 
    if (connection && connection.state && connection.state !== 4 /* disconnected */) { 
     connection.stop(); 
    } 
}, 

नियंत्रक में:

$scope.$on('$destroy', function() { 
    clientPushHubProxy.stop(); 
}); 
+0

मुझे एक ही समस्या का सामना करना पड़ रहा है, लेकिन मैं AngularJS का उपयोग नहीं कर रहा हूं (मैं एएसपीनेट एमवीसी का उपयोग कर रहा हूं)। क्या आप कृपया jquery का उपयोग कर कनेक्शन को रोकने का सुझाव दे सकते हैं। –

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