SignalR无法读取的未定义的属性客户端(SignalR cannot read property

2019-07-17 19:46发布

我想SignalR添加到我的项目(ASPNET MVC 4)。 但我不能使它发挥作用。

在下面的图片你可以看到我收到的错误。 我读过很多计算器的职位,但他们都不是解决我的问题。

这是我做过什么至今:

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();
        });
    });
});

DLL的我看到SignalR引用:

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

任何想法如何得到它的工作? 我应该做任何改变,因为脚本是在/脚本/ lib文件夹?

注:我发现下面的指示这里就如何设置温莎城堡,使其与SignalR工作,并再次,似乎在代理无法创建,我得到了同样的错误:

Cannot read property client of undefined

这意味着没有创建代理到集线器

这是我有它在服务器

public class IncidentServerHub : Hub

像这样在客户端

var clientServerHub = $.connection.incidentServerHub;

同样,我在这里可以看到动态创建的文件:

/GdpSoftware.Server.Web/signalr/hubs

那么,为什么不创建代理?

提前致谢!!! 吉列尔莫。

Answer 1:

我固定从改变我的js代码的问题: var myHub = $.connection.SentimentsHub;var myHub = $.connection.sentimentsHub;

所以,如果你有一些集线器类名TestHub必须使用testHub(首字母小写)在JS名



Answer 2:

对于那些谁试图添加在束生成的代理文件路径。

不要在你的BundleConfig.cs的“〜/ signalr /中心”。

你可以有被捆绑的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")
}

我希望这有帮助。



Answer 3:

我有同样的错误信息,并通过固定一个错字,我在对轮毂类[HubName]属性解决了这个问题 - 这是不完全匹配的客户端JavaScript的性能。

C#毂类:

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

客户端的JavaScript:

var foo = $.connection.gameHub;

“gameHub”必须是相同的。

心连心



Answer 4:

对于ASP.Net MVC人:
检查_Layout.cshtml
如果您呼叫的“@RenderBody()”后的jquery包,你会得到这个错误。
Resoultion:只需推动“@ Scripts.Render(”〜/包/ jQuery的“)”到头部编写的脚本“一节”在所有signalr脚本



Answer 5:

集线器类必须被定义为公共。 例如:

class ChatHub : Hub

实际上应该是

public class ChatHub : Hub


Answer 6:

好吧,我发现这个问题,有一点我需要做的是:

这两个引用失踪:

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

现在,我包括他们获得NuGet包:WebApiDoodle.SignalR它使用这两个。 我的问题是,为什么我安装了NuGet包这些DLL中没有添加一个:Microsoft.AspNet.SignalR - 预?

错误?

然后,我在的global.asax.cs有这个

using SignalR;

所以

RouteTable.Routes.MapHubs();

用那一个,我需要删除,使用和使用这一个:

using Microsoft.AspNet.SignalR;

所以MapHubs使用一个,并开始工作。

希望这可以帮助别人。 吉列尔莫。



Answer 7:

你应该把SignalR和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> 


Answer 8:

使得HUB类“公共”解决了这个问题对我来说。



文章来源: SignalR cannot read property client of undefined