Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 信号器无法设置属性'';未定义的_C#_Asp.net Mvc 4_Signalr_Signalr Hub - Fatal编程技术网

C# 信号器无法设置属性'';未定义的

C# 信号器无法设置属性'';未定义的,c#,asp.net-mvc-4,signalr,signalr-hub,C#,Asp.net Mvc 4,Signalr,Signalr Hub,我正在尝试在我的MVC4应用程序中设置信号器 问题是——即使当我浏览到path/signalr/hubs时,我确实看到了代码(fiddler为/signalr/hubs显示200OK),但它似乎没有包含对我的hub的任何引用,客户端代码也没有看到hub和方法 我在启动调试时遇到以下错误(IIS Express,VS Express 2012): Global.asax中的应用程序启动包含: //RouteTable.Routes.MapHubs("/signalr&

我正在尝试在我的MVC4应用程序中设置信号器

问题是——即使当我浏览到path/signalr/hubs时,我确实看到了代码(fiddler为/signalr/hubs显示200OK),但它似乎没有包含对我的hub的任何引用,客户端代码也没有看到hub和方法

我在启动调试时遇到以下错误(IIS Express,VS Express 2012):

Global.asax中的应用程序启动包含:

        //RouteTable.Routes.MapHubs("/signalr", new HubConfiguration());
        RouteTable.Routes.MapHubs();
        RouteConfig.RegisterRoutes(RouteTable.Routes);
(我假设这会生成/signalr/hub,这似乎有效,但没有链接到我的实际hub。可以看出,我尝试了这两个选项)

在我的项目中,我在根目录中获得了带有MessageHub.cs的文件夹“Hubs”:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;

namespace Prj.Hubs 
{
[HubName("messagehub")]
public class MessageHub : Hub
{
    public void MessageAll(string message)
    {
        Clients.All.writeMessage(message);
    }

    public void MessageOthers(string message)
    {
        Clients.Others.writeMessage(message);
    }

    public void MessageSingle(string message)
    {
        
    }
}
}

在my_Layout.cshtml中,我在结束标记之前有:

<script type="text/javascript" src="~/Scripts/jquery-1.9.1.js"></script>
    <script type="text/javascript" src="~/Scripts/jquery.signalR-1.1.2.js"></script>
    <script src="/signalr/hubs" type="text/javascript"></script>
    <script type="text/javascript">
        $(document).ready(function () {

            // create proxy on the fly
            var proxy = $.connection.messagehub; // this connects to our 'messageHub' Hub as above

            // for SignalR to call the client side function we need to declare it with the Hub
            proxy.messageAll = function (message) {
                $('#messages').append('<li>' + message + ''); // when the Hub calls this function it appends a new li item with the text 
            };

            // declare function to be called when button is clicked 
            $("#broadcast").click(function () {
                // calls method on Hub and pass through text from textbox 
                proxy.messageAll($("#message").val());
            });

            // Start the connection 
            $.connection.hub.start();
        });
    </script>

$(文档).ready(函数(){
//动态创建代理
var proxy=$.connection.messagehub;//这连接到我们的“messagehub”集线器,如上所述
//对于signar调用客户端函数,我们需要用Hub声明它
proxy.messageAll=函数(消息){
$(“#messages”).append(“
  • ”+message+”);//当中心调用此函数时,它会将文本附加到一个新的li项 }; //声明单击按钮时要调用的函数 $(“#广播”)。单击(函数(){ //调用Hub上的方法并从textbox传递文本 proxy.messageAll($(“#message”).val()); }); //启动连接 $.connection.hub.start(); });
  • (旁注-signar根本不喜欢@Scripts.Render(“~/bundles/jquery”),但直接jquery脚本include似乎可以工作)


    那么为什么它不能准确识别“messagehub”?

    我解决了这个问题-我的解决方案包含多个项目,尽管我已经卸载了SignalR,但在bin/Debug文件夹中的一些项目中,仍然有我几个月前尝试过的较旧的SignalR版本的痕迹

    在运行时,signer试图将一些旧dll和新引用连接起来。所以如果你有这个错误那么

    • 卸载信号器
    • 在整个解决方案文件夹中搜索“SignalR”,然后删除所有内容
    • 从Nuget软件包管理器重新安装SignalR