zoukankan      html  css  js  c++  java
  • ASP.NET SignalR Troubeshooting

    method could not be resolved

    场景:
    Javascript客户端不生成代理,调用服务端方法。
    按照官网文档的用法:

    contosoChatHubProxy.invoke('newContosoChatMessage', { UserName: userName, Message: message}).done(function () {
        console.log ('Invocation of NewContosoChatMessage succeeded');
    }).fail(function (error) {
        console.log('Invocation of NewContosoChatMessage failed. Error: ' + error);
    });
    

    但是实际调用时,却抛出以下异常:

    'SendMessage' method could not be resolved.
    Potential candidates are: SendMessage(toFinanceId:String, toCustomerName:String, message:String):Task
    

    原因:调用服务端方法时,传递的参数类型不对。
    这里服务端方法定义的是三个参数,而我传递的是包含这三个参数的对象,因此不匹配。

    参考:.NET Client unable to call hub methods with array parameters

    当SignalR连接超过2个时,网站请求被全部阻塞

    前一段时间在网站中利用 SignalR 增加了实时聊天功能,最初的开发过程一切正常,但是自从更换新电脑后,出现一个现象:
    打开网站,第一批请求都完毕后,后续所有的请求都变成 pending 状态,服务器一直没有进行响应。
    查看 IIS 工作进程的当前请求,可以看到有3个 SignalR 的连接,并没有其他正在被处理的请求。

    我尝试在代码中把 SignalR 部分注释掉,然后之前所有被阻塞的请求突然活了过来。

    于是猜测可能是使用 SignalR 不当造成的,但是相同的代码在之前的电脑上则没有该问题。

    这两台电脑的一个不同之处是,旧电脑的 OS 是 Windows 10 Professional,新电脑的 OS 是 Windows 10 Home。

    于是在关键词中新增关键词 Windows 10 Home,再次Google,很快找到了答案:
    不同的 Windows 版本, IIS 有并发连接数限制并且各个版本不同。

    Windows 10 Home : 3
    Windows 10 Professional : 10
    

    需要说明的是,该限制取决于Windows版本而不是IIS版本。

    Windows 版本可以划分为 Client 版本和 Server 版本,Client 版本有限制,如 Windows 7、Windows 8、Windows Vista;但是 Server 版本没有限制,如 Server 2003、Server 2008、Server 2012。

    经过验证, 装有 Windows 10 Professional 电脑的 IIS 并发请求数量不能超过9个。

    总结排错过程:

    1. 排查代码;
    2. 两台电脑的操作系统的区别;

    参考: Windows 8 / IIS 8 Concurrent Requests Limit

  • 相关阅读:
    Linux:Day45(下)
    Linux:Day45(上)
    Linux:Day44(下)
    彻底理解JDK异步
    Ribbon是什么?
    RocketMQ学习笔记(一)eclipse版的quickstart
    线性表的遍历
    八皇后问题
    汉诺塔
    servlet的url-pattern规则
  • 原文地址:https://www.cnblogs.com/songxingzheng/p/ASP-NET-SignalR-Troubeshooting.html
Copyright © 2011-2022 走看看