2012-05-15 3 views
6

के बाहर कैसे मैं हब के बाहर ग्राहकों connectionId/clientid मिलता है .. मैं निम्न कार्य करने में कामयाब रहे clientId जैसी चीज।प्राप्त connectionId हब, SignalR

उत्तर

4

आप हब पर आईकनेक्टेड/आईडीआईकनेक्ट को कार्यान्वित कर सकते हैं और मैन्युअल रूप से डेटाबेस में उदाहरण के लिए क्लाइंट का ट्रैक रख सकते हैं, फिर आवश्यक होने पर सूची को वापस खींचें। नीचे दिए गए उदाहरण क्यों दिया गया कनेक्शन वैश्विक संदर्भ पर ईद होगा SignalR Wiki

public class Status : Hub, IDisconnect, IConnected 
{ 
    public Task Disconnect() 
    { 
     return Clients.leave(Context.ConnectionId, DateTime.Now.ToString()); 
    } 

    public Task Connect() 
    { 
     return Clients.joined(Context.ConnectionId, DateTime.Now.ToString()); 
    } 

    public Task Reconnect(IEnumerable<string> groups) 
    { 
     return Clients.rejoined(Context.ConnectionId, DateTime.Now.ToString()); 
    } 
} 
4

से है? इसके संदर्भ में कौन सा कनेक्शन होगा? जब आप वैश्विक संदर्भ प्राप्त करते हैं, तो आप सर्वर से क्लाइंट तक एक तरफ से चैनल तक पहुंच रहे हैं और इस पर संदेश भेज सकते हैं। आपके पास हब के कनेक्शन आईडी तक पहुंच नहीं है क्योंकि आप इसमें कॉल नहीं कर रहे हैं। यदि आप उन्हें उपयोग करने की ज़रूरत है तो आप उन्हें अपने आवेदन में कहीं भी स्टोर कर सकते हैं।

+2

हर कोई चैट सर्वर नहीं बनाता है। मुझे लगता है कि वर्तमान क्लाइंट द्वारा कनेक्शन कनेक्शन का उपयोग कैसे किया जाए, इसलिए उस उपयोगकर्ता/सत्र में एक संदेश भेजा जा सकता था। मैं खुद को सोच रहा हूं कि एक क्लाइंट से एमवीसी एक्शन में इसे कैसे करना है जहां मैं प्रगति संदेश भेजना चाहता हूं। उपयोगकर्ता नाम से कनेक्शन आईडी को कैशिंग करने के लिए कुछ तकनीकें हैं, लेकिन मैंने एक ही उपयोगकर्ता को कई कनेक्शन रखने की इजाजत देने के लिए सभ्य कुछ नहीं देखा है जो प्रायः वेब ऐप्स के मामले में होता है। इसके लिए विचार? धन्यवाद। – Dave

+4

आप इसे क्लाइंट से अपनी एमवीसी कार्रवाई में भेजते हैं। यह $ .connection.hub.id के माध्यम से ग्राहक पर उपलब्ध है। – davidfowl

1

यहां समाधान है। आप hub के अंदर एक विधि का आह्वान कर सकते हैं और आप वहां से connection ID वापस कर सकते हैं।

हब में

public string GetConnectionID() 
{ 
    return "Your Connection ID as String" //This can be stored in a list or retrieved in any other method 
} 

नियंत्रक

var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>(); 
MyHub _connectedHub= new MyHub(); 
var connectedUserID = _connectedHub.GetConnectionID(); 

में आप connectedUserID चर में केंद्र के बाहर आईडी की आवश्यकता कर देंगे। आशा है कि यह मदद करता है।