<小时/> UPDATE4 :( 已解决)
最后,一切都像魅力一样。谢谢SignalR团队!
我找到了本教程 - SignalR - 5分钟演示(http://www.youtube.com/watch?v=tEBaDo_sFfA)
但我有一些问题: - 我安装了VS2012Ultimate,在创建了一个示例ASP.NET MVC4 Internet App之后,右键单击References - &gt;管理NuGet包,搜索SignalR ....看起来不像在视频中,没有一个:SignalR,SignalR.Js,SignalR.Server ...... :( 有谁知道为什么?
UPDATE1 : 我安装了SignalR(http://nuget.org/packages/microsoft.aspnet.signalr),之后我安装了asp.net秋季更新(http://www.microsoft.com/en-us/download/details.aspx?id=35493)。
但是我从writeMessage
获得了关于函数“ChatHub.cs
”的错误。
"Error1'Microsoft.AspNet.SignalR.Hubs.HubConnectionContext' does not contain a definition for 'writeMessage'
and no extension method 'writeMessage' accepting a first argument of type
'Microsoft.AspNet.SignalR.Hubs.HubConnectionContext' could be found (are you missing a using directive or an
assembly reference? ..\MvcApplication1\Hubs\ChatHub.cs"
使用Clients.All.
或Clients.Others.
“解决”此错误并在聊天初始化后使用chat.writeMessage
启动集线器后,在GoogleChrome控制台中加载时出现两个错误:
"Uncaught TypeError: Cannot set property 'writeMessage' of undefined"
:
"Uncaught TypeError: Object #<Object> has no method 'createProxy'"
在此行:
// Create and store the hub proxy
hub._.proxy = hubConnection.createProxy(hub._.hubName);
使用Clients.All.
或Clients.Others.
解决此错误并在最后启动集线器,然后使用chat.client.writeMessage
(我安装了Microsoft.AspNet.SignalR.Client),我得到了在GoogleChrome控制台中加载时出现两个错误:
"Uncaught TypeError: Cannot read property 'client' of undefined"
有人可以帮帮我吗?! :(
提前致谢!!
档案 ChatHub.cs
:
namespace MvcApplication1.Hubs
{
//[Microsoft.AspNet.SignalR.Hubs.HubName("chathub")]
[Microsoft.AspNet.SignalR.Hubs.HubName("chatHub")]
public class ChatHub : Microsoft.AspNet.SignalR.Hubs.Hub
{
public void BroadcastMessage(string message)
{
//rebroadcast the message to all the connected clients
Clients.writeMessage(message);//ERROR on compile
//I tried both of the followings, give no error, BUT when i press Submit doesn't appear messages anywhere
//Clients.All.writeMessage(message);
//Clients.Others.writeMessage(message);
}
}
}
档案 Index.cshtml
:
@section scripts
{
<script type="text/javascript" src="~/Scripts/jquery.signalR-1.0.0-alpha2.js"></script>
@*not working, GET localhost:3420/SignalR 500 (Internal Server Error)*@
@*<script type="text/javascript" src="SignalR"></script>*@
@* with any of these declarations i don't get 500 error any more, but still not working *@
<script type="text/javascript" src="~/signalr/hubs"></script>
@*<script type="text/javascript" src="../signalr/hubs"></script>*@
<script type="text/javascript">
$(document).ready(function()
{
//i tried these, but in vain..
//var connection = new Microsoft.AspNet.SignalR.Connection("localhost:3420/");
//$.connection.hub.url = 'localhost:3420/signalr/';
var chat = $.connection.chatHub;
$.connection.hub.start();
//Uncaught TypeError: Cannot set property 'writeMessage' of undefined
//chat.writeMessage = function (msg)
//Uncaught TypeError: Cannot read property 'client' of undefined
chat.client.writeMessage = function (msg) {
{
$("#messages").append("<li>" + msg + "</li>");
}
$("#buttonSubmit").click(function ()
{
//chat.broadcastMessage($("#txtInput").val());
chat.server.broadcastMessage($("#txtInput").val());
});
$.connection.hub.start();//just one error at client
});
</script>
}
<h5>Chat with SignalR</h5>
<fieldset>
<legend>SignalR Demo</legend>
<label for="txtInput">Chat Message</label>
<input id="txtInput" type="text" />
<button id="buttonSubmit">Submit</button>
<fieldset>
<legend>Messages</legend>
<ul id="messages"></ul>
</fieldset>
</fieldset>
UPDATE2 :
在 Tim B James '建议之后,我:
提及:
- 将函数 Main
中的代码放入我的HomeController.cs
- &gt;功能:public ActionResult Index()
;
- 改变了这一行:
var hubConnection = new HubConnection(“localhost / mysite”);
与这一个:
var hubConnection = new HubConnection(“localhost:14079”);
但是,我的页面没有加载(“等待localhost ...”)
- 如果我没有将Main的代码放入控制器的函数中,
我收到错误:
"Uncaught TypeError: Cannot read property 'chat' of undefined "
on this line:
var chat = $.connection.chat;
UPDATE3 :
UPDATE2与 删除 行
UPDATE4 :( 已解决)
一开始的指示。
答案 0 :(得分:2)
最新版本有一些无证的细微差别,事实上我今天正在研究它们。
首先,您在引用的链接中不需要Main的Code。这是为了在WPF应用程序或Windows 8应用程序中使用Signalr。
可能存在或可能不存在问题的第一个问题是使用HubNameAttribute,可能需要也可能不需要。
如果没有HubName,集线器的名称应解析为$ .connection.chatHub
您已经处理的下一部分是每个集线器上的新命名空间。
chatHub.client - These are client defined methods, that the server may invoke.
chatHub.server - These are server defined methods, that the client may invoke.
chatHub.state - This is the state that gets sent to and from the server.
现在,未被捕获的错误是JavaScript无法正确输出的内容,很可能是集线器定义,因为集线器变量为空。您需要在封面下验证集线器是否正常返回。
<script type="text/javascript" src="~/signalr/hubs"></script>
这应该返回一个格式正确的jQuery ready块,它定义了这些集线器的所有集线器和服务器方法。使用像Fiddler这样的工具会对此有所帮助。
我也会开始使用Chrome或Firefox w / Firebug,两者各有优缺点,但两者都会为您提供网络监控和调试功能。能够捕获未处理的异常一直是试图调试所有JavaScript的生命保护程序。
希望这有助于您解决未解决的问题。
答案 1 :(得分:0)
首先,YouTube视频现在已经过时,与现在可用的SignalR版本有关。
其次,我会删除您正在使用的项目并重新开始。这次,通过NuGet包管理器安装SignalR Alpha版本。
安装包Microsoft.AspNet.SignalR -pre
安装包Microsoft.AspNet.SignalR.client -pre
完成此操作后,请阅读此处的SignalR网站上的文档/示例
https://github.com/SignalR/SignalR/wiki
如果您遵循一些基础知识,那么您应该进行排序。