Asp.net web api 无法读取属性';客户';未定义的使用信号器

Asp.net web api 无法读取属性';客户';未定义的使用信号器,asp.net-web-api,signalr,signalr-hub,Asp.net Web Api,Signalr,Signalr Hub,我整天都在做这件事,运气不好。 我也试过(几乎)每一个SO问题,但我没有让它起作用 我使用非常简单的信号器推送消息和单独的简单前端运行web api来显示推送消息。 在我的情况下,推送消息是不断变化的数字 index.html <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>test app</title> <sc

我整天都在做这件事,运气不好。 我也试过(几乎)每一个SO问题,但我没有让它起作用

我使用非常简单的信号器推送消息和单独的简单前端运行web api来显示推送消息。 在我的情况下,推送消息是不断变化的数字

index.html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>test app</title>

    <script src="scripts/jquery-2.1.4.js"></script>
    <script src="scripts/jquery.signalR-2.2.0.js"></script>

    <script src="/signalr/hubs"></script>
</head>
<body>
    <div id="testElm">TEST: </div>

    <script type="text/javascript">
        $(document).ready(function () {

            $.connection.hub.url = "http://localhost:55833/signalr";
            var hub = $.connection.displayHub;

            hub.client.pushMessage = function (response) {

                $('#testElm').text(response);
            };

            $.connection.hub.start();
        });
    </script>
</body>
</html>
这是我要的日志

2015-06-15 16:44:15 GMT+0100 (GMT Daylight Time)] SignalR: Auto detected cross domain url.
2015-06-15 16:44:15.314 jquery.signalR-2.2.0.js:81 [16:44:15 GMT+0100 (GMT Daylight Time)] SignalR: Negotiating with 'http://localhost:55833/signalr/negotiate?clientProtocol=1.5'.
2015-06-15 16:44:15.434 jquery.signalR-2.2.0.js:81 [16:44:15 GMT+0100 (GMT Daylight Time)] SignalR: webSockets transport starting.
2015-06-15 16:44:15.435 jquery.signalR-2.2.0.js:81 [16:44:15 GMT+0100 (GMT Daylight Time)] SignalR: Connecting to websocket endpoint 'ws://localhost:55833/signalr/connect?transport=webSockets&clientProtocol=1.5&connectionToken=h7UAGOrF6RP8JUE%2F82K84E8NSZOd8jsuijsCQ2Jyh1jRi7zXmIpoVnIP9tjEjlcWvxihtZBNt6BYdaAW2jp574B5nXS%2BJFEW%2F%2BdixsiV0yu3YwaN5ERh6yhYtkvztQSQ&tid=5'.
2015-06-15 16:44:15.451 jquery.signalR-2.2.0.js:81 [16:44:15 GMT+0100 (GMT Daylight Time)] SignalR: Websocket opened.
2015-06-15 16:44:15.510 jquery.signalR-2.2.0.js:81 [16:44:15 GMT+0100 (GMT Daylight Time)] SignalR: webSockets transport connected. Initiating start request.
2015-06-15 16:44:15.518 jquery.signalR-2.2.0.js:81 [16:44:15 GMT+0100 (GMT Daylight Time)] SignalR: The start request succeeded. Transitioning to the connected state.
2015-06-15 16:44:15.518 jquery.signalR-2.2.0.js:81 [16:44:15 GMT+0100 (GMT Daylight Time)] SignalR: Now monitoring keep alive with a warning timeout of 13333.333333333332, keep alive timeout of 20000 and disconnecting timeout of 30000
我一直在

Cannot read property 'client' of undefined
  • 选中“hub”将显示hub未定义
  • 浏览到,我可以看到正在创建服务器上的集线器
  • 暂时合并API和前端,一切都会很好,但如果我把它们分开,我会得到上面的错误
  • 使用[HubName(“displayHub”)]属性没有任何区别
  • 根据上述日志正确设置CORS
你知道是什么导致了这个错误吗?是否有一种方法可以进一步调试Signaler以了解发生了什么

更新1: 在阅读ASP.NET信号器集线器API指南-上的JavaScript之后 我已根据将代码更改为,但没有生成代理段落:

var conn = $.hubConnection("http://localhost:55833/signalr");
var hubProxy = conn.createHubProxy('displayHub');

hubProxy.on('pushMessage', function (response) {
    $('#testElm').text(response);
});

conn.start();

它开始起作用了。。。有人能解释一下原因吗?

根据您的问题,我知道您有两种不同的客户端和服务器应用程序,并且您正在使用CORS。第一次尝试失败的原因是您没有使动态信号器端点以服务器应用程序为目标。您应该更改以下内容:

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

为此:

<script src="http://localhost:55833/signalr/hubs"></script>


原因是,端点动态生成表示集线器形状的Javascript代码,因此需要在集线器所在的应用程序上调用它,从而调用服务器。

如果您的signalr项目在运行时未加载,也可能会出现此错误。e、 它缺少一个组件。
不需要完整的主机前缀,因此包含/signalr/hubs就足够了。

您的意思是客户端“signalr/hubs”需要以服务器地址为目标?你在文档中有关于这个的链接吗?我稍后会尝试一下,让你知道。谢谢。我找不到关于这一点的明确声明,但这是相当含蓄的,并且对于动态端点的工作方式是有意义的。它使用反射来检查集线器并生成代理,因此它必须从正在运行的进程访问集线器的定义。客户不知道怎么做。
<script src="/signalr/hubs"></script>
<script src="http://localhost:55833/signalr/hubs"></script>