2012-11-02 18 views
8

के अंदर पूरा यूआरएल प्राप्त करें मैं एएसपी.नेट एमवीसी अनुप्रयोगों के लिए सिग्नलआर सीखने के लिए एक मजेदार परियोजना के रूप में, सिग्नलआर का उपयोग कर एक उपयोगकर्ता ट्रैकिंग समाधान विकसित कर रहा हूं।सिग्नलआर हब

वर्तमान में मैं लॉग इन उपयोगकर्ताओं को ट्रैक कर सकता हूं और वे एक विशिष्ट पृष्ठ पर कितने समय तक हैं। यदि वे किसी अन्य पृष्ठ पर जाते हैं तो मैं उसे और टाइमर ट्रैक करता हूं जो सिग्नलआर रीसेट अपडेट कर रहा है ... कई अन्य सुविधाएं लागू या आंशिक रूप से लागू की गई हैं।

मुझे जिस समस्या का सामना करना पड़ रहा है वह है कि पूर्ण यूआरएल नियंत्रक/एक्शन/पैरामीटर सिग्नलआर हब के अंदर कैसे प्राप्त करें?

जब मैं HttpContext.Current.Request.Url का उपयोग करता हूं तो यूआरएल हमेशा /सिग्नल/कनेक्ट होता है।

नोट:

var hub = $.connection.myHub; 
$.connection.hub.start(); 

_Layout.cshtml में है।

अद्यतन:

मैं

var location = '@HttpContext.Current.Request.Url'; 
var hub = $.connection.myHub; 
$.connection.hub.start().done(function() { 
    hub.setLocation(location); 
}); 

उपयोग करने के लिए कोशिश की है और स्थान सही ढंग से पारित कर दिया है, लेकिन मैं नहीं बाद में कनेक्ट() काम पर इसकी आवश्यकता है। क्या ऐसा करना संभव है?

अद्यतन 2:

यह दृष्टिकोण Connect() रूप

var hub = $.connection.myHub; 
$.connection.hub.start(function(){hub.setLocation(location)}); 

काम नहीं करता है से पहले कहा जाता है।

मेरे केंद्र में मेरे पास कई विधियां हैं लेकिन मैं Connect() पर एक मान (मेरे मामले में एक स्थान) पास करना चाहता हूं, क्या यह संभव है?

public class MyHub : Hub, IDisconnect, IConnected 
{ 
    public Task Connect() 
    { 
     //do stuff here 
     //and i would like to have the **location** value 
    } 

    public Task Disconnect() 
    { 
     //do stuff here    
    }    
} 

अद्यतन 3

QueryString उपयोग से पहले Connect() होता है डेटा भेजने के।

var location = '@HttpContext.Current.Request.Url'; 

var hub = $.connection.myHub; 
$.connection.hub.qs = "location= + location; 
$.connection.hub.start(); 
+0

नमस्ते के लिए गैर आईआईएस की मेजबानी देखने के लिए, आईआईएस पर काम करेंगे ... आप अभी भी इस पर नज़र रखने के समाधान पर काम कर रहे हैं ... आप अपने कोड साझा करने बुरा? –

+0

@jalchr मुझे कोई फर्क नहीं पड़ता लेकिन एनडीए होगा; (अगर आपके कोई प्रश्न हैं तो मैं कृपया सही दिशा में मदद/बिंदु करूंगा। –

+0

टिप: उपयोगकर्ता ट्रैकिंग के लिए आपको यह सुनिश्चित करने की ज़रूरत है कि पृष्ठ को पूरी तरह से लोड करने से पहले सिग्नलर तुरंत कनेक्ट हो जाए संसाधन: 'waitForPageLoad'' तो सुनिश्चित करें कि आप इसे सेट करते हैं: http://stackoverflow.com/questions/32856436/signalr-is-slow-to-connect-from-javascript-client/32856492#32856492 –

उत्तर

4

अपने स्थान मूल्य की तरह डेटा पासिंग कनेक्ट करने के लिए() एक क्वेरी स्ट्रिंग पैरामीटर के माध्यम से संभव है: SignalR: How to send data to IConnected.Connect()

+0

धन्यवाद। मुझे वास्तव में नहीं पता कि Google या Stackoverflow सुझाव कैसे हैं मुझे अपने जवाब में ले जाना नहीं है। –

1

आप इसे अपने क्लाइंट जेएस से पैरामीटर के रूप में अपने केंद्र में कॉल कर सकते हैं।

+0

आपकी प्रतिक्रिया के लिए धन्यवाद। I इस सवाल को अद्यतन किया है। इस समस्या का कोई समाधान? –

+0

क्या आप इसे प्रारंभ में नहीं डाल सकते हैं(), यह पर्याप्त है। उदाहरण के लिए hub.start (funcoint() {hub.setLocation (location);}) करने के बजाए – dove

+0

कनेक्ट() कार्य, जब आप इसका सही अर्थ रखते हैं तो मैं स्पष्ट नहीं हूं। – dove

1

क्वेरी स्ट्रिंग का उपयोग करना बहुत सुरक्षित नहीं है, एक हैकर का कारण जे एस कोड बनाने और आप गलत स्थान तोड़ने जो कुछ भी तर्क भेज सकते हैं तुम्हारे पीछे है

आप Owin-enviromment चर

var underlyingHttpContext = Context.Request.Environment[typeof(HttpContextBase).FullName] as HttpContextBase;

तब निकालने जो कुछ भी आप की जरूरत से प्राप्त करने की कोशिश कर सकते हैं।

यह अन्य Owin सामान https://github.com/aspnet/AspNetKatana/wiki/OWIN-Keys