当前位置: 首页 > 知识库问答 >
问题:

Transport=ServersentEvents时未调用SignalR客户端函数

通啸
2023-03-14

在我的机器上,我发现Chrome中没有调用SignalR客户端函数。

在客户端代码中,我使用

$.connection.hub.logging = true;

我可以在Chrome的javascript控制台中看到与成功连接相对应的日志消息。为了参考,这些日志消息是

[20:22:16 GMT+0800 (W. Australia Standard Time)] SignalR: Negotiating with '/SignalRChat-RC/signalr/negotiate'. jquery.signalR-1.0.0-rc2.js:54
[20:22:16 GMT+0800 (W. Australia Standard Time)] SignalR: Attempting to connect to SSE endpoint 'http://localhost/SignalRChat-RC/signalr/connect?transport=serverSentEvents&…7-22c5dbf27e0d&connectionData=%5B%7B%22name%22%3A%22chathub%22%7D%5D&tid=3' jquery.signalR-1.0.0-rc2.js:54
[20:22:16 GMT+0800 (W. Australia Standard Time)] SignalR: EventSource connected jquery.signalR-1.0.0-rc2.js:54
[20:22:16 GMT+0800 (W. Australia Standard Time)] SignalR: Now monitoring keep alive with a warning timeout of 40000 and a connection lost timeout of 60000 jquery.signalR-1.0.0-rc2.js:54

但是当调用客户端方法时,Chrome的javascript控制台不会记录消息。

$.connection.hub.start({ transport: 'longPolling' })
$(function () {
    // Turn on logging to the javascript console
    $.connection.hub.logging = true;

    // set up an error-handling function
    $.connection.hub.error(function (err) {
        alert("Error signalR:" + JSON.stringify(err));
    });

    // Declare a proxy to reference the hub.  
    var chat = $.connection.chatHub;

    // Create a function that the hub can call to broadcast messages.
    // This function is never called when running in Chrome with the default signalR connection
    chat.client.broadcastMessage = function (name, message) {
        // Html encode display name and message.  
        var encodedName = $('<div />').text(name).html();
        var encodedMsg = $('<div />').text(message).html();
        // Add the message to the page.  
        $('#discussion').append('<li><strong>' + encodedName
            + '</strong>:&nbsp;&nbsp;' + encodedMsg + '</li>');
    };

    // Get the user name and store it to prepend to messages. 
    $('#displayname').val(prompt('Enter your name:', ''));
    // Set initial focus to message input box.   
    $('#message').focus();

    // Start the connection. 
    // Use $.connection.hub.start({ transport: 'longPolling' }) for reliability
    // Use $.connection.hub.start() to demonstrate that Chrome doesn't receive messages
    $.connection.hub.start().done(function () {
        // Enable the "Send" button
        $('#sendmessage').removeAttr('disabled');
        $('#sendmessage').click(function () {
            // Call the Send method on the hub.  
            chat.server.send($('#displayname').val(), $('#message').val());
            // Clear text box and reset focus for next comment.  
            $('#message').val('').focus();
        });
    });
});

共有1个答案

江敏学
2023-03-14

我在Win7谷歌Chrome24上试了一下,效果很好。

您可以解决安装Fiddler和在javascript中设置断点的问题

POST /signalr/send?transport=serverSentEvents&connectionId=6ff0bffa-c31e-4d85-9aff-24f4528555ee HTTP/1.1
Host: localhost:43637
Connection: keep-alive
Content-Length: 113
Accept: application/json, text/javascript, */*; q=0.01
Origin: 
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17
Content-Type: application/x-www-form-urlencoded
Referer: /index.html
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

data=%7B%22H%22%3A%22chathub%22%2C%22M%22%3A%22Send%22%2C%22A%22%3A%5B%22gus%22%2C%22hello%22%5D%2C%22I%22%3A0%7D
 类似资料:
  • 我在Windows Server 2012和IIS8上使用SignalR V2.0,我通过以下文章在服务器上启用了WebSockets,http://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-websocket-protocol-support 但是signalR首先尝试使用websockets,然后将传输更改为serverSe

  • 实时调试模块提供埋点的审计功能,主要应用于以下两个业务场景: 测试或者产品需要校验埋点是否跟业务场景一致: 埋点是否埋上:当前业务流程或者位置是否有埋点。==避免漏埋== 埋点是否准确:当前埋点是否跟业务流程或者位置一致,关键信息是否上报。==避免埋点错误== 测试或者开发需要校验埋点,但是又不希望当前操作产生错误日志污染线上数据 实时调试功能目前支iOS、Android以及微信小程序,本节介绍客

  • 默认的,Jersey 传输层提供了 HttpUrlConnection。这个转换是通过实现了 Connector SPI 接口的HttpUrlConnectorProvider 实现的。你可以执行和/或注册自己的 Connector 实例到 Jersey 客户端的实现,这将取代 基于 默认HttpURLConnection 的传输层。 Jersey 提供了几种可供选择的客户端传输连接器的实现。可以

  • 客户端模块是一个较复杂的模块,这里包含了集群管理、路由、地址管理器、连接管理器、负载均衡器,还与代理、注册中心等模块交互。

  • 通过 Invoke 方法同步调用 Invoke(string, []reflect.Value, *InvokeSettings) ([]reflect.Value, error) Invoke 方法有三个输入参数,两个输出参数。 第一个输入参数是远程方法名。 第二个输入参数是远程方法参数。 第三个输入参数是远程调用设置。 第一个输出参数表示返回的结果。 第二个输出参数表示返回的错误。 因为使用该

  • 我正在遵循GitHub上的Microsoft Graph repository提供的一个示例。其中,它描述了使用需要访问令牌的DelegateAuthenticationProvider。Marc Lafleur的auth流入门指定了一种获取访问令牌的方法,我结合了使服务-服务身份验证工作的指导。 尽管我收到了一个似乎有效的访问令牌,但当我通过graph客户端发出命令时,我会从Microsoft