zoukankan      html  css  js  c++  java
  • SignalR使用心得...

    新手首次使用可使用Nuget下载实例代码:搜索:Microsoft.AspNet.SignalR.Sample

    SignalR官方说明:

    https://docs.microsoft.com/en-us/aspnet/signalr/overview/getting-started/introduction-to-signalr

    SignalR好处显而易见,  就是说哪怕是的项目是.net3.0 开始就使用SignalR,你以后升级成.net4.5了, 你想用websocket你可以直接升级, 因为SignalR会帮你选择你不需要关心。

    注意事项:

    • 在SignalR中使用websocket

    但是如果需要在SignalR中使用websocket必须满足:

    • 浏览器支持
    • 新的Windows运行时 (win server 12 和win10)
    • IIS 8.0
    • .NET 4.5
      • ASP.NET
      • WCF
      • HttpListener

    服务器中安装websocket及注意事项:https://docs.microsoft.com/en-us/iis/get-started/whats-new-in-iis-8/iis-80-websocket-protocol-support

    装完后需要在webconfig中增加:

    <system.web>
        <httpRuntime targetFramework="4.5" />
      </system.web>
    • 在SignalR中使用长轮询


     
    如果SignalR服务和应用服务 不在同一个服务器 需要使用JsonP解决跨域问题:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using Microsoft.Owin;
    using Owin;
    using Microsoft.AspNet.SignalR;
    using Microsoft.Owin.Cors;
    
    [assembly: OwinStartup(typeof(***.Startup))]
    namespace ***
    {
        public class Startup
        {
            public void Configuration(IAppBuilder app)
            {  
    
                /*如何处理错误:在服务器上显式启用详细的错误消息
                客户端:添加事件的处理程序
                hubConnection.Error += ex => Console.WriteLine("SignalR error: {0}", ex.Message);
                */
    
                app.Map("/signalr", map =>
                {
                    // Setup the CORS middleware to run before SignalR.
                    // By default this will allow all origins. You can 
                    // configure the set of origins and/or http verbs by
                    // providing a cors options with a different policy.
                    map.UseCors(CorsOptions.AllowAll);
                    var hubConfiguration = new HubConfiguration
                    {
                        // You can enable JSONP by uncommenting line below.
                        // JSONP requests are insecure but some older browsers (and some
                        // 长轮询跨域 (不使用直接注销)
                        //EnableJSONP = true
                    };
                    // Run the SignalR pipeline. We're not using MapSignalR
                    // since this branch already runs under the "/signalr"
                    // path.
                    map.RunSignalR(hubConfiguration);
                });
            }
    
        }
    }
    

      

     以下列表显示了SignalR使用哪些步骤来决定要使用的传输。

     

    1. 如果浏览器是Internet Explorer 8或更早版本,则使用长轮询。
    2. 如果配置了JSONP(即,连接启动时jsonp参数设置为true),则使用长轮询。
    3. 如果正在进行跨域连接(即,如果SignalR端点与主机页面不在同一个域中),则如果满足以下条件,则将使用WebSocket:

      • 客户端支持CORS(跨源资源共享)。有关哪些客户端支持CORS的详细信息,请参阅caniuse.com上的CORS
      • 客户端支持WebSocket
      • 服务器支持WebSocket

        如果不符合上述任何一个标准,将使用长轮询。有关跨域连接的更多信息,请参阅如何建立跨域连接

    4. 如果未配置JSONP并且连接不是跨域,则如果客户端和服务器都支持,则将使用WebSocket。
    5. 如果客户端或服务器不支持WebSocket,则可以使用服务器发送事件。
    6. 如果服务器发送事件不可用,则尝试使用永久帧。
    7. 如果Forever Frame失败,则使用Long Polling。
  • 相关阅读:
    Nhibernate多表查询解决办法
    Nhibernate compositeid class must override Equals()解决办法
    SQLSERVER2005安装说明
    IList转化为Dataset C#
    Named SQL queries
    把object转换成DataSet,进行数据绑定
    使用Lucene检索文档中的关键字
    使用代理为业务操作添加安全检测
    mongodb副本集架构搭建
    Java生成中文验证码
  • 原文地址:https://www.cnblogs.com/xulisha123/p/7359013.html
Copyright © 2011-2022 走看看