दिलचस्प पोस्ट
सीएसएस द्वारा छवि स्केलिंग: क्या -कोई-कुरकुरा-किनारों के लिए एक वेबकिट विकल्प है? एचटीएमएल PHP "if" स्टेटमेंट के अंदर एम्बेड किया जा सकता है? । htaccess फिर से लिखना चर प्राप्त करें मावेन – हमेशा डाउनलोड करें स्रोत और जवाडॉक्स Google+ दीवार में पोस्ट कैसे करें अगर मैं बाइंड के साथ एक ईवेंट हैंडलर को बाध्य नहीं किया है या पहले से ही क्लिक किया है तो क्या मैं एक <a> लिंक का पालन करने के लिए jquery click () पर कॉल कर सकता हूं? उपयोगकर्ता के लिए जावा जेडीबीसी एक्सेस निषेध आत्मा अर्थ क्रिया में पैरामीटर प्रकारों का पता लगा रहा है जावास्क्रिप्ट में स्प्लेट ऑपरेटर्स, पायथन में * args और ** kwargs के बराबर? एप्लिकेशन आइकन क्रिया बार पर नहीं दिखाया गया है निर्धारित करें कि एंड्रॉइड ऐप पहली बार उपयोग किए जाने पर है WCF त्रुटि: 405 विधि अनुमति नहीं है लिंक और स्क्रिप्ट टैग्स में सीएसएस और जावास्क्रिप्ट यूआरएल को "? V = 1" को क्या जोड़ता है? जब डेटा जोड़ दिया जाता है तो कैसे div के अंत तक ऑटो-स्क्रॉल करें? jQuery स्वत: पूर्ण ट्रिगर बदलें ईवेंट

सिग्नल आर + एक्शन विधि के माध्यम से एक हब को संदेश पोस्ट करना

मैं सभी सब्सक्राइब किए गए ग्राहकों को संदेश प्रकाशित करने के लिए सिग्नल आर ( https://github.com/SignalR/SignalR ) के हब-फीचर का उपयोग कर रहा हूं:

public class NewsFeedHub : Hub public void Send(string channel, string content) { Clients[channel].addMessage(content); } 

यह जावास्क्रिप्ट के माध्यम से "भेजें" को कॉल करते समय ठीक काम करता है, लेकिन मुझे वेब एप्लिकेशन को संदेश प्रकाशित करना भी पसंद है (एएसपी.नेट एमवीसी क्रिया पद्धति के भीतर से)। मैंने पहले से ही एक नया ऑब्जेक्ट ओबी न्यूफ़ाइडहब को तत्काल करने की कोशिश की और भेजें विधि बुला रही है, लेकिन यह एक त्रुटि में परिणाम (जैसा कि हब का अंतर्निहित "कनेक्शन" सेट नहीं है)। क्या कनेक्शन के बिना हब का उपयोग करने का कोई तरीका है?

Solutions Collecting From Web of "सिग्नल आर + एक्शन विधि के माध्यम से एक हब को संदेश पोस्ट करना"

कृपया ध्यान दें कि सिग्नलआर एपीआई कई बार बदल गया है क्योंकि इस प्रश्न के बारे में पूछा गया था। यह एक मौका है कि कुछ जवाब पुरानी हो जाएंगे। इसका मतलब यह नहीं है कि लेखन के समय वे सही थे क्योंकि वे नीचे-वोट किए जाने चाहिए

इसके लिए एक और अद्यतन उत्तर है, जैसा कि सिग्नल आर विकी में देखा गया है

सी#

 Public ActionResult MyControllerMethod() { var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>(); context.Clients.All.methodInJavascript("hello world"); // or context.Clients.Group("groupname").methodInJavascript("hello world"); } 

vb.net

 Public Function MyControllerMethod() As ActionResult Dim context = GlobalHost.ConnectionManager.GetHubContext(Of MyHub)() context.Clients.All.methodInJavascript("hello world") '' or context.Clients.Group("groupname").methodInJavascript("hello world") End Function 

अद्यतन करें

यह कोड अपडेट किया गया है। परिवर्तनों के लिए http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-server का पालन करें

यदि आप डि कंटेनर का उपयोग कर रहे हैं

यदि आप डिब्बों के डिब्बे का इस्तेमाल अपने हब को तार करने के लिए कर रहे हैं, तो अपने कंटेनर से GetHubContext करें, और उस कनेक्शन GetHubContext पर GetHubContext को कॉल करें।

2017 फरवरी, लघु और सरल समाधान

इसे सुलझाने के लिए मैं आमतौर पर निम्नलिखित तरीके से अपने केन्द्रों को डिज़ाइन करता हूं:

 public class NewsFeedHub : Hub { private static IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext<NewsFeedHub>(); // Call this from JS: hub.client.send(channel, content) public void Send(string channel, string content) { Clients.Group(channel).addMessage(content); } // Call this from C#: NewsFeedHub.Static_Send(channel, content) public static void Static_Send(string channel, string content) { hubContext.Clients.Group(channel).addMessage(content); } } 

इसलिए जावास्क्रिप्ट और बैक-एंड कोड से कॉल करना आसान है। दो तरीकों से क्लाइंट पर एक ही घटना होती है।

अद्यतन : यह उत्तर पुराना है, भी! सिग्नलआर का सार्वजनिक एपीआई निरंतर प्रवाह में है, ऐसा लगता है टिम बी जेम्स जुलाई 2012 के अनुसार नया, उचित एपीआई उपयोग है

माइक से वर्तमान में स्वीकार किए गए उत्तर पुराना है, और अब सिग्नल आर के नवीनतम संस्करण के साथ काम नहीं करता है।

यह एक अद्यतन संस्करण है जो दिखाता है कि किसी MVC नियंत्रक कार्रवाई से एक हब को संदेश कैसे पोस्ट करना है:

 public ActionResult MyControllerMethod() { // Important: .Resolve is an extension method inside SignalR.Infrastructure namespace. var connectionManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>(); var clients = connectionManager.GetClients<MyHub>(); // Broadcast to all clients. clients.MethodOnTheJavascript("Good news!"); // Broadcast only to clients in a group. clients["someGroupName"].MethodOnTheJavascript("Hello, some group!"); // Broadcast only to a particular client. clients["someConnectionId"].MethodOnTheJavascript("Hello, particular client!"); } 

डीडीएन के उत्तर के बाद आप एक ओवरलोडेड स्थिर विधि बना सकते हैं और एक विधि में सामान्य तर्क रख सकते हैं – मैं इस पद्धति का उपयोग करता हूं

 public class ChatHub : Hub { private static IHubConnectionContext<dynamic> GetClients(ChatHub chatHub) { if (chatHub == null) return GlobalHost.ConnectionManager.GetHubContext<ChatHub>().Clients; else return chatHub.Clients; } // Call from JavaScript public void Send(string message) { Send(message, this); } // Call from C# eg: Hubs.ChatHub.Send(message, null); public static void Send(string message, ChatHub chatHub) { IHubConnectionContext<dynamic> clients = GetClients(chatHub); // common logic goes here clients.All.receiveSend(message); } } 

फिर अपने नियंत्रक से आप उपयोग कर सकते हैं

 Hubs.ChatHub.Send(arg1, null);