ASP.NET MVC 4 VS2012中的SignalR -1.0.0-alpha2的简单示例无法正常工作

时间:2012-11-19 02:59:32

标签: c# jquery asp.net-mvc-4 visual-studio-2012 signalr

<小时/> UPDATE4 :( 已解决

最后,一切都像魅力一样。谢谢SignalR团队!


用这个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控制台中加载时出现两个错误:

    Index.cshtml

    中的
  • "Uncaught TypeError: Cannot set property 'writeMessage' of undefined"
    
  • localhost:3420 / signalr / hubs 中的
  • "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控制台中加载时出现两个错误:

    Index.cshtml

    中的
  • "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 :( 已解决

一开始的指示。

2 个答案:

答案 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

如果您遵循一些基础知识,那么您应该进行排序。