2012-08-26 17 views
24

मैं नमूना चैट एप्लिकेशन बनाने के लिए सिग्नलर और एएसपीनेट एमवीसी 3 का उपयोग कर रहा हूं। यहां मेरा सिग्नलर हबसिग्नलआर - उपयोगकर्ता नाम

public class MyHub:Hub,IDisconnect 
{ 
public Task Join() 
{ 
    string username = HttpContext.Current.User.Identity.Name; 
    //find group based on username 
    string group = getGroup(username) 
    return Groups.Add(Context.ConnectionId, group); 
} 

public void doStuff() 
{ 
    string group = getGroup(); 
    Clients[group].doStuffOnBrowser(); 
} 
} 

मेरी समस्या यह है कि पृष्ठ लोड होने पर मेरा ऐप क्रैश हो गया है। डीबगर के साथ कदम उठाने पर, मैंने पाया कि HttpContext.Current.User.Identity.Name शून्य है, भले ही उपयोगकर्ता पहले ही प्रमाणीकृत हो चुका है। मैं अपने टास्क जॉइन() विधि में उपयोगकर्ता नाम कैसे प्राप्त कर सकता हूं?

+0

कौन सा प्रमाणीकरण मोड आप (रूपों, खिड़कियां, आदि) का उपयोग करते हैं? क्या आप वाकई प्रमाणित हैं? क्योंकि एक नए इंट्रानेट एमवीसी 3 ऐप में 'HttpContext.Current.User' और' Context.User' दोनों शून्य नहीं हैं और वर्तमान उपयोगकर्ता हैं। – nemesv

+0

@nemesv - मेरा आवेदन फॉर्म प्रमाणीकरण का उपयोग करता है और एक इंटरनेट एप्लीकेशन है। सिग्नल का उपयोग करने वाला पृष्ठ केवल तभी पहुंचा जा सकता है जब उपयोगकर्ता –

+0

हैलो @ उपयोगकर्ता 1 प्रमाणीकृत है, क्या आप सिग्नलआर का उपयोग करके कई चैट रूम के लिए मुझे डेमो प्रदान कर सकते हैं। मैं chat.stackoverflow.com जैसे चैट सर्वर को कार्यान्वित करना चाहता हूं –

उत्तर

20

जब SignalR hubs का उपयोग कर आप को HubCallerContext.User संपत्ति का उपयोग कर सकते हैं:

उपयोगकर्ता कि प्रारंभिक http अनुरोध का हिस्सा था हो जाता है।

तो साथ प्रयास करें:

public Task Join() 
{ 
    string username = Context.User.Identity.Name; 
    //find group based on username 
    string group = getGroup(username) 
    return Groups.Add(Context.ConnectionId, group); 
} 
+0

जब मैं HubCallerContext टाइप करता हूं। इंटेलिजेंस केवल 2 विधियों को दिखाता है - "बराबर" और "संदर्भ एक्वाल्स"। मैं सिग्नलर संस्करण 0.5.3 –

+0

का उपयोग कर रहा हूं, आपको मेरे नमूने में 'हब' की 'संदर्भ' संपत्ति का उपयोग करने के बजाय 'HubCallerContext' टाइप करने की आवश्यकता नहीं है:' स्ट्रिंग उपयोगकर्ता नाम = this.Context.User.Identity नाम; 'जैसा कि आप पहले से ही' Context.ConnectionId' के साथ करते हैं। मैंने इसे और अधिक स्पष्ट करने के लिए अपना उत्तर अपडेट कर दिया है। – nemesv

+3

मैंने आपके कोड स्निपेट की कोशिश की लेकिन Context.User.Identity.Name अभी भी शून्य है जब मैं डीबगर के माध्यम से कदम उठाता हूं। कोई विचार? –

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