मैं एएसपी.नेट एमवीसी 3 में अधिसूचना प्रणाली जैसे फेसबुक को कार्यान्वित करना चाहता हूं: अधिसूचनाएं किसी विशिष्ट उपयोगकर्ता को भेजी जाती हैं ताकि उसे अपने किसी एक आइटम पर कार्रवाई के लिए सूचित किया जा सके।सिग्नलर का उपयोग करें जैसे कि अधिसूचना प्रणाली जैसे फेसबुक
signalr ऐसी आवश्यकता के लिए अनुकूल है? सिग्नलआर का उपयोग करके मैं एक विशिष्ट उपयोगकर्ता (इस उपयोगकर्ता के सभी खुले सत्र) को एक अधिसूचना कैसे भेज सकता हूं?
संपादित
ठीक है, यहाँ मैं क्या
किया क्लाइंट पक्ष
$(function() {
// Proxy created on the fly
var chat = $.connection.chat;
var username = '@Html.ViewContext.HttpContext.User.Identity.Name';
// Declare a function on the chat hub so the server can invoke it
chat.addMessage = function (message) {
$('#messages').append('<li>' + message + '</li>');
};
// Start the connection
$.connection.hub.start(function(){
chat.join(username);
});
});
में सर्वर साइड
public class Chat : Hub
{
public void Join(string username)
{
AddToGroup(username);
}
}
और हर बार में मैं एक उपयोगकर्ता को सूचित करने की आवश्यकता है नियंत्रक में मैं निम्नलिखित करता हूं:
IConnectionManager connectionManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>();
dynamic clients = connectionManager.GetClients<Chat>();
clients[username].addMessage("test");
thx एडम, क्या आपको लगता है कि मैंने अपने पोस्ट स्केल के अंत में जिस समाधान को पोस्ट किया है? Thx – hichn
आपके नियंत्रक को अपने नियंत्रक में इंजेक्शन निर्भरता के रूप में IConnectionManager लेना चाहिए। आपको संकल्प() वास्तव में कहीं और कंट्रोलर फैक्ट्री को कॉल नहीं करना चाहिए। कुछ डी कंटेनर का उपयोग करें (उदाहरण के लिए एकता - unity.mvc3 nuget पैकेज) और अपने नियंत्रक में इंजेक्ट करने के लिए कन्स्ट्रक्टर इंजेक्शन का उपयोग करें। सुनिश्चित करें कि आपके पास IConnectionManager के ठोस कंक्रीट कार्यान्वयन पर एक निपटान विधि है जिसे आप HierarchicalLifetimeManager का उपयोग करके किए जाने पर इसे निपटाने के लिए एकता बताते हैं। निपटान सुनिश्चित करने के लिए ब्रेकपॉइंट सेट करें (केवल तभी यदि आप आईडीस्पोज़ेबल लागू कर रहे हैं) –