SignalR无法读取未定义的属性客户端

我试图添加SignalR到我的项目(ASPNET MVC 4)。 但是我不能使它工作。

在下面的图片中,你可以看到我收到的错误。 图片 我读过很多的stackoverflow的post,但他们都没有解决我的问题。

这是我迄今为止所做的:

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文件(位于Hubs文件夹内)

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

我看到的SignalR的引用是:

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

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

注意我正在按照这里find的有关如何设置Windsor Castle来使其与SignalR一起工作的指令,并且似乎代理服务器无法创build,并且出现同样的错误:

 Cannot read property client of undefined 

这意味着集线器的代理没有被创build

这是我如何在服务器中

 public class IncidentServerHub : Hub 

并在客户端这样

 var clientServerHub = $.connection.incidentServerHub; 

再次,我可以在这里看到dynamic创build的文件:

 /GdpSoftware.Server.Web/signalr/hubs 

那么,为什么代理没有被创build?

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

我通过更改我的js代码解决了这个问题: var myHub = $.connection.SentimentsHub;var myHub = $.connection.sentimentsHub;

所以如果你有一个类名为TestHub的集线器,你必须在js中使用testHub(第一个字母是小写)

对于试图在软件包中添加生成的代理文件path的用户。

不要在你的BundleConfig.cs中包含“〜/ signalr / hubs”

你可以在包中包含JQuery.SignalR

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

但是你需要在你的视图中添加“/ signalr / hubs”

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

我希望这有帮助。

我有相同的错误信息,并通过修复我在Hub类的[HubName]属性中的拼写错误来解决问题 – 它不完全匹配客户端JavaScript中的属性。

C#集线器类:

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

客户端javascript:

 var foo = $.connection.gameHub; 

“gameHub”必须相同。

心连心

对于ASP.Net MVC的人:
检查你的_Layout.cshtml
如果您在“@RenderBody()”之后调用jquery包,则会出现此错误。
解决方法:只需将“@ Scripts.Render(”〜/ bundles / jquery“)”移动到头部分, 或者在脚本“部分”中写入所有的signalr脚本

您的中心课程必须定义为公开的。 例如:

 class ChatHub : Hub 

实际上应该是

 public class ChatHub : Hub 

好的,我发现了这个问题,我需要做的一件事是:

这两个引用缺失:

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

现在,我包括他们得到Nuget包:WebApiDoodle.SignalR使用这两个。 我的问题是为什么这些Dll没有添加一个我安装的Nuget包:Microsoft.AspNet.SignalR -Pre?

错误?

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

 using SignalR; 

所以

 RouteTable.Routes.MapHubs(); 

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

 using Microsoft.AspNet.SignalR; 

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

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

让集线器类“公开”为我解决。

您应该按照正确的顺序放置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>