SignalR客户端未定义

时间:2014-02-21 21:26:12

标签: c# javascript asp.net signalr

我已经使用这个前端代码来快速更新sql表中的表。 但我找不到解决这个问题的方法。

  

未捕获的TypeError:无法读取未定义的属性“client”

<script src="Scripts/jquery-1.6.4.min.js"></script>
<script src="Scripts/jquery.signalR-2.0.2.min.js"></script>
<script src="signalr/hubs"></script>
<script>
    $(function () {
        // Proxy created on the fly
        var job = $.connection.DataHub;
        console.log(job);
        // Declare a function on the job hub so the server can invoke it
        job.client.displayStatus = function () {
            getData();
        };

        // Start the connection
        $.connection.hub.start();
        getData();
    });

    function getData() {
        var $tbl = $('#tblJobInfo');
        $.ajax({
            url: '../api/values',
            type: 'GET',
            datatype: 'json',
            success: function (data) {
                if (data.length > 0) {
                    $tbl.empty();
                    $tbl.append(' <tr><th>ID</th><th>Titulo</th>/tr>');
                    var rows = [];
                    for (var i = 0; i < data.length; i++) {
                        rows.push(' <tr><td>' + data[i].Id + '</td><td>' + data[i].titulo + '</td></tr>');
                    }
                    $tbl.append(rows.join(''));
                }
            }
        });
    }
</script>

如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

我想问题是你没有将集线器的名称更改为驼峰的情况。见下文:

 var job = $.connection.dataHub;

如果您使用HubName属性,则JavaScript客户端上没有对camel case进行名称更改:

[HubName("DataHub")]
public class DataHub: Hub

此外,如果您使用的是ASP.NET MVC 4或5 Razor视图,请使用代字号来引用代理文件引用中的应用程序根目录:

<script src="~/signalr/hubs"></script>

答案 1 :(得分:0)

我们遇到了同样的错误但是,在我们的案例中,我们在Windows Server 2008 IIS 8上进行了一次部署(并且它没有错误地运行)和另一个部署(相同的应用程序,相同的代码)在Windows Server IIS 8上(提出了相同的错误)作为原始海报的错误)。

我们的解决方案是在IIS 8上部署时修改web.config并注释信号器/集线器位置部分中的“system.webServer”部分。

(注意系统注释了system.webServer)

<location path="signalr/hubs"> 
    <system.web> 
        <authorization> 
            <allow users="*"/> 
        </authorization> 
    </system.web> 
    <!--system.webServer> 
        <security> 
            <authorization> 
                <add accessType="Allow" users="*"/> 
            </authorization> 
        </security> 
    </system.webServer--> 
</location> 

这是原始的,它适用于IIS 7,但在IIS 8上失败:

(注意没有评论system.webServer)

<location path="signalr/hubs"> 
    <system.web> 
        <authorization> 
            <allow users="*"/> 
        </authorization> 
    </system.web> 
    <system.webServer> 
        <security> 
            <authorization> 
                <add accessType="Allow" users="*"/> 
            </authorization> 
        </security> 
    </system.webServer> 
</location>