सवाल सिग्नलर अपरिभाषित संपत्ति क्लाइंट नहीं पढ़ सकता है


मैं अपनी परियोजना (एएसपीएनईटी एमवीसी 4) में सिग्नल जोड़ने की कोशिश कर रहा हूं। लेकिन मैं इसे काम नहीं कर सकता।

नीचे दी गई छवि में आप जो त्रुटि प्राप्त कर रहे हैं उसे देख सकते हैं। image मैंने बहुत सारी स्टैक ओवरफ्लो पोस्ट पढ़ी हैं लेकिन उनमें से कोई भी मेरी समस्या का समाधान नहीं कर रहा है।

मैंने अभी तक यही किया है:

1) Ran Install-Package Microsoft.AspNet.SignalR -Pre
2) Added RouteTable.Routes.MapHubs(); in Global.asax.cs Application_Start()
3) If I go to http://localhost:9096/Gdp.IServer.Web/signalr/hubs I can see the file content
4) Added <modules runAllManagedModulesForAllRequests="true"/> to Web.Config
5) Created folder Hubs in the root of the MVC application
6) Moved jquery and signalR scripts to /Scripts/lib folder (I'm not using jquery 1.6.4, I'm using the latest)

यह मेरा index.cshtml है

<h2>List of Messages</h2>

<div class="container">
    <input type="text" id="message" />
    <input type="button" id="sendmessage" value="Send" />
    <input type="hidden" id="displayname" />
    <ul id="discussion">
    </ul>
</div>

@section pageScripts
{
    <!--Reference the SignalR library. -->
    <script src="@Url.Content("~/Scripts/jquery.signalR-1.0.0-rc1.min.js")" type="text/javascript"></script>
    <!--Reference the autogenerated SignalR hub script. -->
    <script type="text/javascript" src="~/signalr/hubs"></script>
    <script src="@Url.Content("~/Scripts/map.js")" type="text/javascript"></script>
}

यह मेरी IServerHub.cs फ़ाइल है (हब्स फ़ोल्डर के अंदर स्थित है)

namespace Gdp.IServer.Ui.Web.Hubs
{
    using Microsoft.AspNet.SignalR.Hubs;
    [HubName("iServerHub")]
    public class IServerHub : Hub
    {
        public void Send(string name, string message)
        {
            Clients.All.broadcastMessage(name, message);
        }
    }
}

और यह map.js है

$(function () {

    // Declare a proxy to reference the hub. 
    var clientServerHub = $.connection.iServerHub;

    // Create a function that the hub can call to broadcast messages.
    clientServerHub.client.broadcastMessage = function (name, message) {
        $('#discussion').append('<li><strong>' + name + '</strong>:&nbsp;&nbsp;' + message + '</li>');
    };

    // Get the user name and store it to prepend to messages.
    $('#displayname').val(prompt('Enter your name:', ''));

    // Set initial focus to message input box.  
    $('#message').focus();

    // Start the connection.
    $.connection.hub.start().done(function () {
        $('#sendmessage').click(function () {
            // Html encode display name and message. 
            var encodedName = $('<div />').text($('#displayname').val()).html();
            var encodedMsg = $('<div />').text($('#message').val()).html();

            // Call the Send method on the hub. 
            clientServerHub.server.send(encodedName, encodedMsg);

            // Clear text box and reset focus for next comment. 
            $('#message').val('').focus();
        });
    });
});

डीएलएल के मैं सिग्नल के लिए संदर्भ देखता हूं:

  1. Microsoft.AspNet.SignalR.Core
  2. Microsoft.AspNet.SignalR.Owin
  3. Microsoft.AspNet.SignalR.SystemWeb

कोई विचार यह कैसे काम करता है? क्या मुझे कोई बदलाव करना चाहिए क्योंकि स्क्रिप्ट / स्क्रिप्ट / lib फ़ोल्डर में हैं?

ध्यान दें मैं पाया निर्देश का पालन कर रहा हूँ यहाँ सिग्नलर के साथ काम करने के लिए विंडसर कैसल को कैसे सेट अप करें, और फिर, ऐसा लगता है कि प्रॉक्सी नहीं बनाया जा सकता है और मुझे एक ही त्रुटि मिल रही है:

Cannot read property client of undefined

जिसका अर्थ है कि हब के लिए प्रॉक्सी नहीं बनाया गया था

इस तरह मैं सर्वर में यह है

public class IncidentServerHub : Hub

और इस तरह ग्राहक में

var clientServerHub = $.connection.incidentServerHub;

दोबारा, मैं यहां गतिशील रूप से बनाई गई फ़ाइल देख सकता हूं:

/GdpSoftware.Server.Web/signalr/hubs

तो, प्रॉक्सी क्यों नहीं बनाई गई है?

अग्रिम में धन्यवाद!!! गिलर्मो।


44
2018-01-03 20:41


मूल


आप के साथ प्रयास कर सकते हैं <script type="text/javascript" src="@Url.Content("~/signalr/hubs")"></script> - nemesv
वही होता है, वैसे भी, जब मैं ब्राउजर से ब्राउज़ करता हूं तो मुझे फ़ाइल सामग्री दिखाई देती है। क्या मुझे कोई बदलाव करना चाहिए क्योंकि स्क्रिप्ट / स्क्रिप्ट / lib फ़ोल्डर में हैं? - polonskyg


जवाब:


मैंने अपने जेएस कोड को बदलकर उस समस्या को ठीक किया:      var myHub = $.connection.SentimentsHub; सेवा मेरे      var myHub = $.connection.sentimentsHub;

तो यदि आपके पास क्लास नाम टेस्टहब के साथ कुछ केंद्र है तो आपको जेएस में testHub (पहला अक्षर लोअरकेस) नाम का उपयोग करना होगा


60
2018-01-22 21:38



यह कार्य करता है। Thks - Satish Singh
धन्यवाद, इससे मुझे एहसास हुआ कि मेरे हब नाम काफी मेल नहीं खाते हैं। - wiseowl2828
बस "पहला" पत्र :), मुश्किल! - Dhanuka777
इसका दस्तावेज़ीकरण में उल्लेख किया गया है "नोट जावास्क्रिप्ट में सर्वर वर्ग का संदर्भ और उसके सदस्य ऊंट मामले में हैं। कोड नमूना जावास्क्रिप्ट में सी # चैटहब क्लास को चैटहब के रूप में संदर्भित करता है।" docs.microsoft.com/en-us/aspnet/signalr/overview/... - Sandeep


उन लोगों के लिए जिन्होंने बंडल में जेनरेट प्रॉक्सी फ़ाइल पथ जोड़ने की कोशिश की।

अपने BundleConfig.cs में "~ / सिग्नलर / हब्स" शामिल न करें

आप कर सकते हैं JQuery.SignalR बंडल में:

bundles.Add(new ScriptBundle("~/bundles/signalr").Include(
                  "~/Scripts/jquery.signalR-{version}.js"));

लेकिन आपको जोड़ने की आवश्यकता होगी "/ Signalr / केन्द्रों" यह आपके विचार में है:

@section Scripts {
    @Scripts.Render("~/bundles/signalr")
    @Scripts.Render("/signalr/hubs")
}

आशा है कि ये आपकी मदद करेगा।


31
2018-06-03 21:14



मैंने इसके साथ बहुत संघर्ष किया। आपने मेरा दिन बचाया धन्यवाद! - newman
गतिशील रूप से जेनरेट हब्स जेएस फ़ाइल वास्तव में नहीं बनाया गया था जब तक मैं ठीक से संदर्भित नहीं करता "/ सिग्नल / हब्स" - dudeNumber4
दोस्त! अगर मैं कर सकता तो मैं आपको इसके लिए एक प्लस 100 दूंगा। - Sentinel


मेरे पास एक ही त्रुटि संदेश था और हब क्लास पर [HubName] विशेषता में एक टाइपो को ठीक करके समस्या का समाधान किया - यह क्लाइंट-साइड जावास्क्रिप्ट में संपत्ति से बिल्कुल मेल नहीं खा रहा था।

सी # हब वर्ग:

[HubName("gameHub")]
public class GameHub : Hub
{

क्लाइंट-साइड जावास्क्रिप्ट:

var foo = $.connection.gameHub;

"गेम हब" एक जैसा होना चाहिए।

hth


17
2018-05-24 06:53





एएसपी.नेट एमवीसी लोगों के लिए:
अपनी जाँच _Layout.cshtml
यदि आप jquery बंडल को कॉल कर रहे हैं "@RenderBody ()", आपको यह त्रुटि मिल जाएगी।
resoultion: बस मुख्य अनुभाग में "@ स्क्रिप्ट्स। रेंडर (" ~ / बंडल / jquery ")" को स्थानांतरित करें या  स्क्रिप्ट "अनुभाग" में सभी सिग्नल स्क्रिप्ट लिखें


6
2018-01-11 17:42





आपके हब कक्षाओं को जनता के रूप में परिभाषित किया जाना चाहिए। उदाहरण के लिए:

class ChatHub : Hub

वास्तव में होना चाहिए

public class ChatHub : Hub

3
2017-10-22 09:56



आउच !! वह यह था। बहुत खुश है कि आपने इसे पोस्ट किया है। सबक सीखा। - raddevus


ठीक है, मुझे यह समस्या मिली है, मुझे एक चीज करने की ज़रूरत थी:

ये दो संदर्भ गायब थे:

Microsoft.AspNet.SignalR.Hosting.AspNet
Microsoft.AspNet.SignalR.Hosting.Common

अब, मैंने उन्हें nuget पैकेज प्राप्त करने में शामिल किया: WebApiDoodle.SignalR जो उन दोनों का उपयोग करता है। मेरा सवाल यह है कि उन डीएलएस को क्यों नहीं जोड़ा गया था, मैंने नुजेट पैकेज स्थापित किया था: Microsoft.AspNet.SignalR -Pre?

बग?

तब मेरे पास यह मेरे global.asax.cs में था

using SignalR;

इसलिए

RouteTable.Routes.MapHubs();

उस का उपयोग कर रहा था, मुझे इसे हटाने और इसका उपयोग करने की आवश्यकता है:

using Microsoft.AspNet.SignalR;

तो MapHubs उस का उपयोग करें, और काम करना शुरू कर दिया।

उम्मीद है कि यह दूसरों की मदद करता है। गिलर्मो।


2
2018-01-03 21:58





हब वर्ग को "सार्वजनिक" बनाना मेरे लिए हल हो गया।


0
2017-12-14 13:48



यह प्रश्न पहले ही हल हो गया है। - abhiarora


आपको सिग्नलआर और jQuery स्क्रिप्ट्स को सही में रखना चाहिए क्रम :

<script src="/Scripts/jquery-1.6.4.min.js" ></script>

<script src="/Scripts/jquery.signalR-1.1.4.js"></script>

<script src="/signalr/hubs"></script> 

0
2017-07-23 08:16