2013-04-17 8 views
15

नहीं कहा जाता है मुझे लगता है कि सिग्नलआर के जेएस क्लाइंट हब के साथ कोई समस्या है।सिग्नल क्लाइंट हब पर ऑन इवेंट

समस्या यह है कि 'ऑन' हैंडलर काम नहीं कर रहा है - यह कोई त्रुटि उत्पन्न नहीं करता है लेकिन सर्वर द्वारा भेजे गए कोई सिग्नल प्राप्त नहीं करता है। नीचे दिया गया कोड एक निकास दिखाता है जहां मैं सर्वर (आवेषण का उपयोग करके) को कॉल करता हूं जो ठीक काम करता है - फिर सर्वर पर मैं स्वीकार करने के लिए वापस कॉल करता हूं हबडाटा जिसे क्लाइंट पर उठाया जाना चाहिए लेकिन नहीं।

मेरा उद्देश्य तब होता है जब पृष्ठों पर नेविगेट किया जाता है कि प्रत्येक पृष्ठ एक विशिष्ट केंद्र से कनेक्शन खोल देगा और जब उपयोगकर्ता किसी अन्य पृष्ठ पर जाता है तो यह कनेक्शन जारी करता है !!

EDIT: निम्न कोड स्निपेट का उपयोग करके काम करता है लेकिन मुझे आश्चर्य है कि 'ऑन' ईवेंट का उपयोग करके कोड नीचे क्यों काम नहीं करता है!

var superHub = $.connection.mySuperHub; 

    superHub.client.acceptHubData = function (data) { 
     $('<li>hello there' + data + '</li>').prependTo($('#ul1')) 
    } 

    $.connection.hub.start().done(function() { 
     $('<li>done phase 1</li>').prependTo($('#ul1')) 
    }); 

किसी भी मदद की बहुत सराहना की जाएगी!

इस ग्राहक कोड (जे एस में)

$(document).ready(function() { 

    var myHub; 

    try { 

     var connection = $.hubConnection(); 

     connection.start().done(function() { 

      myHub = connection.createHubProxy("mySuperHub"); 

      myHub.on('acceptHubData', function (data) { 
       alert(data); // THIS IS NOT CALLED! 
      }); 

      myHub.invoke('AcceptSignal', "hello from the client2"); 

     }); 

    } 
    catch (e) { 
     alert(e.message); 
    } 
}); 

यह सर्वर कोड है:

[HubName("mySuperHub")] 
public class MyHub : Hub 
{ 

    private readonly HubEngine _hubEngine; 

    public MyHub() : this(HubEngine.Instance) { } 

    public MyHub(HubEngine hubEngine) 
    { 
     _hubEngine = hubEngine; 
    } 

    public void AcceptSignal(string msg) 
    { 
     Clients.Caller.acceptHubData("hi"); 
     Clients.All.acceptHubData("hi"); 
    } 

} 
+0

यह http://stackoverflow.com/a/42527962/1770868 –

उत्तर

40

तुम अब भी on विधि जे एस ग्राहक हब विधि SignalR के नवीनतम संस्करण में कॉल के लिए घटनाओं को जोड़ने के लिए hubConnection.start() कॉल करने से पहले उपयोग कर सकते हैं, लेकिन अगर आप एक hubProxy के लिए किसी भी घटना श्रोताओं में शामिल न करें, आपको सदस्यता नहीं दी जाएगी हब में सिग्नलआर hubConnection शुरू होने पर ईवेंट हैंडलर वाले हब्स की सदस्यता लेता है। यदि आप अपने केंद्र में सब्सक्राइब नहीं हैं, तो शुरू होने के बाद उस हब में कोई भी ईवेंट जोड़ना() काम नहीं करेगा।

यदि आप प्रारंभ() से पहले हब में कम से कम एक ईवेंट श्रोता जोड़ते हैं, भले ही यह कुछ भी नहीं करता है, तो आप शुरू करने के बाद on का उपयोग कर हब में कोई अतिरिक्त ईवेंट हैंडलर जोड़ सकते हैं और आपका हैंडलर बुलाए जाएंगे।

यदि आप इससे पहले कि आप start() फोन, लेकिन start() कहा जाता है के बाद ही on सफलतापूर्वक घटना श्रोताओं जोड़ देगा hubProxy.on('eventName', function (... या autogeneratedHubProxy.client.eventName = function (... का उपयोग कर कोई ईवेंट जोड़ने फर्क नहीं पड़ता।

+1

शानदार - जो वास्तव में काम करता है - अनुमान लगाया नहीं होगा! मैंने एक गैर-मौजूद घटना जोड़कर इसका परीक्षण किया है और यह भी काम करता है! धन्यवाद – Marcel

+0

मैन, मैं अपने बालों को फाड़ रहा था (मैंने जो कुछ छोड़ा था) यह पता लगाने की कोशिश कर रहा था कि मैंने क्या किया है।शुरू करने से पहले यह सब्सक्राइब करने के पीछे पीछे लग रहा था, लेकिन जाहिर है कि आपको यही करने की ज़रूरत है। एफवाईआई - मैं 'ऑन()' विधि का उपयोग कर रहा था और 'स्टार्ट() 'के बाद सदस्यता लेने पर यह काम नहीं करेगा। – Zach

+0

धन्यवाद आदमी यह काम किया। –

1
नहीं

यकीन SignalR का कौन सा संस्करण उपयोग कर रहे हैं, लेकिन मैं का उपयोग कर अधिक सफलता मिली है

var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>(); 
context.Clients.All.acceptHubData("hello");  

और अपने ग्राहकों पर: मेरे सर्वर पर निम्न सिंटैक्स

myHub.client.acceptHubData = function (data) { 
    console.log(data); 
} 
+0

प्रतिक्रिया के लिए धन्यवाद - यह वास्तव में काम कर रहा है - मैं समझना चाहता हूं कि 'ऑन' इवेंट सिद्धांत क्यों काम नहीं कर रहा है - मेरा संपादन देखें! – Marcel

+0

संभावित रूप से आप सिग्नलर के पुराने संस्करण के लिए प्रलेखन देख रहे हैं। निश्चित रूप से, यह यहां दस्तावेज में अनुशंसित दृष्टिकोण है: https://github.com/SignalR/SignalR/wiki/SignalR-JS-Client-Hubs – paul

+0

मैं इसे देख रहा था https://github.com/SignalR/ सिग्नलआर/विकी/सिग्नलआर-जेएस-क्लाइंट-हब्स-% 28 नो-प्रॉक्सी% 2 9 – Marcel

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