2012-07-22 3 views
27

मैं प्राप्त करने का प्रयास कर रहा हूँ मेरी देव माहौल में काम करने WebSockets:SignalR

  • विजुअल स्टूडियो 2010
  • विंडोज 7
  • सिग्नल आर 0.51
  • नवीनतम क्रोम/फ़ायरफ़ॉक्स

दुर्भाग्य से जावास्क्रिप्ट क्लाइंट लंबे मतदान का उपयोग कर रहा है। जब मैं ग्राहक के पक्ष वेब सॉकेट मजबूर मैं कनेक्ट नहीं कर सकता:

$.connection.hub.start({ transport: ['webSockets'] }) 

सर्वर कोड स्वयं के द्वारा होस्ट और नमूने के आधार पर है और लगता है कि:

static void Main(string[] args) 
{ 
    string url = "http://localhost:8081/"; 
    var server = new Server(url); 

    // Map the default hub url (/signalr) 
    server.MapHubs(); 

    // Start the server 
    server.Start(); 

    Console.WriteLine("Server running on {0}", url); 

    // Keep going until somebody hits 'x' 
    while (true) 
    { 
     ConsoleKeyInfo ki = Console.ReadKey(true); 
     if (ki.Key == ConsoleKey.X) 
     { 
      break; 
     } 
    } 
} 

public class MyHub : Hub 
{    
    public void Send(string message) 
    { 
     Clients.addMessage(message); 
    } 
} 

मैंने चारों ओर खोजा और कुछ भी निश्चित नहीं मिला। क्या मुझे कुछ अतिरिक्त चीजें निर्दिष्ट करने की ज़रूरत है, विजुअल स्टूडियो 2012 का उपयोग करें या यह केवल विंडोज 8/आईआईएस 8 पर काम करेगा?

उत्तर

22

इस उत्तर के आधार पर https://stackoverflow.com/a/9135334/700926 आप देखेंगे कि सिग्नल में वेबसॉकेट समर्थन विंडोज 8/आईआईएस 8 पर निर्भर करता है - उत्तर सिग्नलआर के जीथब पेज पर विकी पेज को भी इंगित करता है, हालांकि, यह पृष्ठ अब मौजूद नहीं है।

लेकिन, जिथब में विकी रेपो क्लोन करके और कुछ संशोधन वापस जाएं, आपको SignalR.WebSockets प्रोजेक्ट का दस्तावेज दिखाई देगा जो सिग्नलआर के जीथब पेज के अनुसार अब मौजूद नहीं है - (जो बता सकता है कि विकी साइट क्यों हटा दी गई है) - हालांकि, इस साल फरवरी से SignalR.WebSockets के लिए wikipage के एक संशोधन में, यह कहा गया है कि:

SignalR.WebSockets पैकेज WebSocket protocol का उपयोग कर कनेक्ट करने के लिए ग्राहकों को अनुमति देने के लिए एक मौजूदा SignalR परियोजना में जोड़ा जा सकता। सिग्नल jQuery क्लाइंट स्वचालित रूप से वेबस्केट्स (यदि ब्राउज़र का समर्थन करता है) के माध्यम से कनेक्ट करने का प्रयास करेगा, इसलिए आपके सिग्नलआर आधारित एप्लिकेशन में वेबस्केट जोड़ने के लिए क्लाइंट पक्ष पर कोई भी बदलाव आवश्यक नहीं है।

SignalR.WebSockets क्रम में भीतर ASP.NET से आने वाली WebSocket कनेक्शन के लिए सुनने में Microsoft.WebSockets पर निर्भर करता है। यह पैकेज बदले में नए वेबसाकेट्स पर निर्भर करता है जो एएसपी.नेट 4.5 और आईआईएस 8.0 में जोड़ा गया था। नतीजतन, SignalR.WebSockets पैकेज केवल विंडोज 8 मशीन पर काम करेगा (.NET 4.5 विंडोज के पुराने संस्करणों पर स्थापित होगा लेकिन विंडोज 8 आईआईएस 8.0 के लिए आवश्यक है)। Windows 8 मशीन (डेवलपर पूर्वावलोकन का उपयोग करके) को सेट करने के तरीके के बारे में अधिक जानकारी के लिए here देखें।

मैंने ऊपर प्रदान करने में सक्षम होने की तुलना में नई जानकारी खोजने की कोशिश की है, लेकिन जहां तक ​​मैं कह सकता हूं, सिग्नलआर विकी इस विषय को अपने वर्तमान संस्करण में स्पष्ट रूप से कवर नहीं करती है।

+6

यह पुराना है लेकिन वेबस्केट समर्थन अभी भी विंडोज 8 पर भरोसा करता है। – davidfowl

+1

आप वास्तव में विंडोज 8/2012, आईआईएस 8 या .NET 4.5 की आवश्यकता के बिना अपने स्वयं के होस्ट किए गए एप्लिकेशन में वेबस्केट का उपयोग कर सकते हैं। मैं यहां यह कैसे करना है इस पर एक तकनीक की व्याख्या करता हूं: http://stackoverflow.com/a/18337019/564726 – BrutalDev

50

विंडोज 8/.NET 4.5 पर भी यह प्रारंभ में काम नहीं कर रहा था, लेकिन इन अतिरिक्त युक्तियों के साथ मुझे अंत में यह काम मिल गया।

  • WebSocket समर्थन

    -> Turn Windows features on or off 
    -> Internet Information Services 
    -> World Wide Web Services 
    -> Application Development Features 
    -> WebSocket Protocol 
    
  • web.config में

    , appSettings के तहत स्थापित करें, तो यह सेटिंग जोड़ें:

    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> 
    

SignalR स्वचालित रूप से WebSockets बातचीत, यह करने के लिए नहीं है निर्दिष्ट किया जाना चाहिए और कोड में विशेष कुछ भी आवश्यक नहीं है।

+0

भयानक। इस सप्ताह के अंत में एक विंडोज 8 वीएम स्थापित करने जा रहा है और मुझे यकीन है कि इससे वास्तव में मदद मिलेगी। –

+2

सही समाधान - डिफ़ॉल्ट रूप से Azure Server2012 में पहला भाग किया जाता है। जोड़ा गया web.config सेटिंग और वेब सॉकेट कनेक्शन काम करना शुरू कर दिया :-) - धन्यवाद मार्टन! – viperguynaz

+2

क्यों बिल्ली को खोजने के लिए इतना कठिन था .. बहुत बढ़िया ... :) – KingOfHypocrites

1

सिग्नल आर विंडोज 7, आईआईएस 7.5 और विजुअल स्टूडियो 2012 पर भी काम करता है। केवल एक ही दोष यह है कि यह लंबे समय तक परिवहन प्रोटोकॉल के रूप में उपयोग करेगा।

उपर्युक्त कॉन्फ़िगरेशन के साथ सफलतापूर्वक सिग्नलआर का उपयोग करने के लिए हमें कुछ चीजों को स्थापित करने की आवश्यकता है, जो वास्तव में किसी सिग्नल ट्यूटोरियल में विस्तृत नहीं हैं।

तो, सर्वर साइड पर (7 जीत, IIS 7.5) जब आप कनेक्शन बनाने और प्रॉक्सी आप कुछ इस तरह करना चाहिए: एक ही तरह से

Connection = new HubConnection('someUrl', false); 
Proxy = Connection.CreateHubProxy('myHubProxy'); 
Connection.Start(new LongPollingTransport()).Wait(); // notice the specification of transport 
बेशक

, क्लाइंट की तरफ आप 'longPooling' होने के रूप में परिवहन प्रोटोकॉल निर्दिष्ट करने के लिए है:

var connection = $.hubConnection('myUrl', { useDefaultPath: false }); 
connection.start({ transport: ['websockets', 'longPolling'], jsonp: true, xdomain: true }) 
0

SignalR में समस्या निवारण WebSockets समस्याओं के लिए ऊपर समाधान के अलावा, यदि आप एक कंपनी के नेटवर्क (या कुछ इसी तरह संरचित) के अंदर हैं तो संभव है कि आपके प्रॉक्सी और फ़ायरवॉल वाई में हस्तक्षेप करेंगे हैंडशेक।

लेकिन, यदि आप इसे एसएसएल पर एक्सेस करते हैं, तो यह रैपर इसे कई मामलों में इस हस्तक्षेप से बचाता है।