2013-08-02 6 views
5

मैंने वेब पर समान पोस्ट देखी हैं और किसी ने भी मेरे लिए काम करने का सुझाव नहीं दिया है। मुझे वास्तव में इस बिंदु पर एक या दूसरे को डंप करने की पसंद का सामना करना पड़ रहा है।बस सिग्नलआर (एएसपीएनटी एमवीसी 4) और require.js एक साथ काम नहीं कर सकता

यह "के साथ SignalR और MVC 4 आरंभ करने संबंधी ट्यूटोरियल":

http://www.asp.net/signalr/overview/getting-started/tutorial-getting-started-with-signalr-and-mvc-4

कहते हैं आप की जरूरत दो स्क्रिप्ट signalR काम करने के लिए शामिल हैं:

<!--Reference the SignalR library. --> 
    <script src="~/Scripts/jquery.signalR-1.0.1.js"></script> 
    <!--Reference the autogenerated SignalR hub script. --> 
    <script src="~/signalr/hubs"></script> 

मैं के रूप में एक नुकसान में हूँ दूसरे को बनाने के लिए, स्वत: उत्पन्न सिग्नलआर हब स्क्रिप्ट, requ.js में होती है। जब तक कि मुझे कुछ याद नहीं आ रहा है, तब तक यह स्वत: उत्पन्न स्क्रिप्ट को शामिल करने के लिए व्यवहार्य आवश्यकता नहीं है। जेएस सिंटैक्स।

: इसके बिना आप jquery.signalR-1.1.2.js की लाइन 159 पर इस त्रुटि मिलती है "जावास्क्रिप्ट रनटाइम त्रुटि: SignalR:। लोड करने में त्रुटि केन्द्रों सुनिश्चित करें कि आपका केन्द्रों संदर्भ सही है, उदाहरण के लिए"

कोड jquery.signalR में उस बिंदु पर यह क्या कर रहा है:

signalR.hub = { 
      start: function() { 
       // This will get replaced with the real hub connection start method when hubs is referenced correctly 
       throw new Error("SignalR: Error loading hubs. Ensure your hubs reference is correct, e.g. <script src='/signalr/hubs'></script>."); 
     } 
    }; 

किसी को वास्तव में किया गया है इस स्वत: जनरेट की स्क्रिप्ट बात require.js के माध्यम से होता है?

थोड़ा और अध्ययन कर रहे थे। मुझे कुछ विवरण जोड़ने दें:

मैं इस दृष्टिकोण का उपयोग कर रहा हूं - स्केलेबल क्लाइंट साइड अनुप्रयोगों का निर्माण: (http://johndavidmathis.wordpress.com/2013/04/23/structuring-scalable-client-side-applications/) और अधिक स्केलेबल संरचना बनाने के लिए। उस श्रृंखला में दूसरा भाग "एकाधिक फाइलों और लॉजिकल फ़ोल्डर संरचना का उपयोग करने के लिए परमिट मॉड्यूल" http://johndavidmathis.wordpress.com/2013/04/23/structuring-scalable-client-side-applications/ ने मुझे एक बेहतर मैरियनेट चैट मॉड्यूल (मेरी मुख्य ऐप.जेएस फ़ाइल से अलग) में एक बेहतर फ़ाइल संरचना प्राप्त करने के लिए अपना वास्तविक सिग्नल कोड अलग कर दिया है। मुझे वास्तव में यह दृष्टिकोण पसंद है। मेरी बाकी परियोजना इस तरह स्थापित की गई है और जब कोड ढूंढने की बात आती है तो यह वाकई लाभ दिखा रहा है। मुझे लगता है कि अतिरिक्त विभाजन है जहां मैं अटक गया हूँ। उस दूसरी निर्भरता, स्वत: उत्पन्न स्क्रिप्ट को उस अलग चैट मॉड्यूल फ़ाइल में नहीं लग रहा है। मैं अभी भी इसका अध्ययन कर रहा हूं लेकिन यह इस समय मुझे इस तरह दिखता है। require.js मेरी कठपुतली एप्लिकेशन में निर्भरता हो जाता है:

require(["marionette","handlebars", "signalr", "signalr.hubs"], function (Marionette) { 
     window.App = new Marionette.Application(); 

     App.addRegions({ 
      headerRegion: "#header", 
      contentRegion: "#content", 
      footerRegion: "#footer", 
     });    

     require(["modules/main/loader", "modules/chat/loader"], function() { 
      App.start(); 
     }); 
    }) 

मैं एक फ़ाइल में चैट मॉड्यूल में अनुप्रयोग में आगे की राह बनाने के लिए, कि निर्भरता चैट चाहते हैं?

कुछ पसंद है?

define(dependencies, 
     function() { 
      App.module("ChatModule", function (ChatModule, App, Backbone, Marionette, $, _, "signalr.hubs", "signalr.hubs") { 

      // SignalR Proxy created on the fly 
       var chat = $.connection.chatHub; 

       // Start the connection 
       $.connection.hub.start(); 

    //more chat code... 

एक अद्यतन:

जवाब नीचे मेरी देव वातावरण में काम करता है। लेकिन जब मैं कोड को वास्तविक उत्पादन सर्वर पर प्रकाशित करता हूं तो यह काम नहीं करता है।

जब कोड वास्तविक उत्पादन सर्वर (विंडोज सर्वर एंटरप्राइज़ 2008 आर 2 पर आईआईएस 6.1) पर प्रकाशित होता है तो ब्राउज़र कंसोल एक बार फिर स्वत: उत्पन्न संदर्भ के लिए "404" दिखाता है।

विशेष रूप से, कंसोल "?" दिखाता है ".js" से पहले संदर्भ पथ में जोड़ा जा रहा है, इस तरह ...

http://mydomain.com/myapp/Scripts/application/signalr/hubs?.js ...

"?" लेने का प्रयास किया बाहर लेकिन फिर यह मेरे ऐप नाम को पथ से हटा देता है, इस तरह ...

http://mydomain.com/signalr/hubs.js

मुझे लगता है कि मुझे क्या मिलेगा वहाँ पहले से एक है, बिना "?", की तरह ...

http://mydomain.com/myapp/Scripts/application/signalr/hubs.js

मैं बस नहीं दिखाई दे रहा है कि कैसे ऐसा करने के लिए।

अंतिम अद्यतन:

उत्पादन सर्वर के लिए पहेली का अंतिम टुकड़ा साइट की वर्चुअल निर्देशिका है। यहां अंतिम कोड है जो मेरे लिए काम करता है। आपकी मदद के लिए धन्यवाद Raciel आर:

requirejs.config({   
     paths: { 
      //core 
      "jquery": "jquery-1.9.1", 

      "signalr": "jquery.signalR-1.1.2", 
      "signalr.hubs": "/productionservervirtualdirectory/signalr/hubs?" 
     }, 
     shim: { 
      "jquery": {exports: "$"},    
      "signalr": { deps: ["jquery"] }, 
      "signalr.hubs": { deps: ["signalr"] } 
     }); 
    //Then all you have to do is to make signalr.hubs required in your modules. Ie: 

    require(["signalr.hubs"], function(){ 
     //your code here 
    }); 
+0

क्या आपने सर्वर पर MapHubs कहा है? प्रश्न देखें: http://stackoverflow.com/questions/16235175/404signalr-hubs-for-signalr-chat-application/16242594#16242594, यह आपके द्वारा चलाए जा रहे कार्यों के विपरीत है लेकिन आपके प्रश्न का उत्तर देना चाहिए। –

+0

हां। वह किया। कोई पाँसा नहीं। यह समस्या बहुत ही विशेष रूप से requ.js वाक्यविन्यास की कमी को दूसरी संदर्भ बनाने के लिए प्रतीत होती है - एक स्वत: उत्पन्न सिग्नलआर हब स्क्रिप्ट के लिए। मैं लोगों को वाक्यविन्यास पर विभिन्न प्रयास कर रहा हूं। मैंने उन सभी की कोशिश की है लेकिन उनमें से कोई भी मेरे लिए काम नहीं किया है। नीचे दिए गए एक ने मेरे लिए भी काम नहीं किया है। – Robert

उत्तर

11
requirejs.config({   
    paths: { 
     //core 
     "jquery": "jquery-1.9.1", 

     "signalr": "jquery.signalR-1.1.2", 
     "signalr.hubs": "/signalr/hubs?" 
    }, 
    shim: { 
     "jquery": {exports: "$"},    
     "signalr": { deps: ["jquery"] }, 
     "signalr.hubs": { deps: ["signalr"] } 
    }); 

फिर तुम सब करने की है अपने मॉड्यूल में आवश्यक signalr.hubs बनाना है। अर्थात्:

require(["signalr.hubs"], function(){ 
    //your code here 
}); 
+0

धन्यवाद। कोई पाँसा नहीं। मुझे लगता है कि इसमें से अधिकतर काम कर रहे हैं। मेरे पास एक और झुर्रियां हैं, हालांकि मैंने अपनी मूल पोस्ट में जोड़ा है। मैं इस दृष्टिकोण का उपयोग कर रहा हूं - स्केलेबल क्लाइंट साइड अनुप्रयोगों का निर्माण: (http://johndavidmathis.wordpress.com/2013/04/23/structuring-scalable-client-side-applications/)। उस श्रृंखला में दूसरे भाग ने मुझे अपने वास्तविक सिग्नल कोड को अलग मैरियनेट चैट मॉड्यूल में विभाजित कर दिया है। मुझे लगता है कि यह असफल रहा है। उस दूसरी निर्भरता, स्वत: उत्पन्न स्क्रिप्ट को उस अलग चैट मॉड्यूल में नहीं लग रहा है। मेरा संपादन देखें। – Robert

+2

भले ही क्लाइंट साइड कोड संगठन और तकनीक जिसका आप उपयोग कर रहे हों, काम करना चाहिए। यहां मुश्किल हिस्सा (सिग्नल को एकीकृत करते समय मुझे एक ही समस्या का सामना करना पड़ा) ऑटो-जेनरेट की गई फ़ाइल है, जिसे जोड़कर काम किया जा सकता है? इसके साथ गड़बड़ करने के लिए requ.js को रोकने के लिए अंत में। मैंने आगे प्लगइन की कोशिश की लेकिन मुझे कोई भाग्य नहीं मिला। जिस सुझाव का मैंने सुझाव दिया वह मुझे एक और एसओ साथी द्वारा सुझाया गया था। Requ.js shims और पथ requ.js तरीके से लिखे गए मॉड्यूल के बीच निर्भरताओं का वर्णन करने के लिए वास्तव में शक्तिशाली हैं, और अपने स्वयं के मॉड्यूल के लिए आपको ठीक से उन्हें परिभाषित करके ठीक होना चाहिए। –

+0

मैं एक साधारण परिदृश्य से जाने की कोशिश करता हूं और धीरे-धीरे अधिक जटिलता पेश करता हूं ताकि आपको यह पता चल सके कि चीजें असफल हो रही हैं। सिग्नलआर Requ.js के साथ काम कर सकता है, वास्तव में मेरे पास एक परियोजना में दोनों काम कर रहे हैं। मुझे लगता है कि आपके प्रश्न का उत्तर देने से। –

2

मैं RequireJS सफलतापूर्वक @ raciel-r के समाधान का उपयोग लेकिन मैं अभी भी कर्म जैसे अन्य जावास्क्रिप्ट मॉड्यूल भी गतिशील प्रॉक्सी से उलझन में थे साथ समस्या हो रही किया गया था की स्थापना की। मैं एक स्थिर फ़ाइल का signalr प्रॉक्सी परिवर्तित और प्रयोग किया जाता है कि इसके बजाय RequireJS साथ:

  1. आयात Microsoft.AspNet.SignalR.Utils

  2. भागो packages/Microsoft.AspNet.SignalR.Utils.2.X.X/tools/signalr.exe ghp /path:my/bin /o:path/to/scripts/server.js जहां /my/bin निर्देशिका अपने SignalR केन्द्रों के साथ विधानसभाओं युक्त है।

  3. server साथ /signalr/hubs करने के लिए अपने संदर्भ बदलें: आप उत्पन्न प्रॉक्सी की सुविधा के तरीकों का उपयोग कर रहे हैं, तो

    requirejs.config({   
    paths: { 
        // ... 
        "signalr.hubs": "path/to/scripts/server" 
    }, 
    // .... 
    
  4. , आप भी उन्हें फिर से लिखने करना होगा (देखें How to create a physical file for the SignalR generated proxy)

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