【问题标题】:SignalR - How do I disable WebSocketsSignalR - 如何禁用 WebSockets
【发布时间】:2012-04-03 13:55:14
【问题描述】:

我升级到 .NET 4.5,现在 SignalR 似乎坚持在 Firefox/Chrome 中使用 WebSockets - 即使我只在没有 WebSocket 服务器的 Windows 7 上使用。

请求明显失败:

Firefox can't establish a connection to the server at ws://www.site.local/signalr?connectionData=

如何强制 SignalR 忘记 Websockets 并使用长轮询,或者有没有办法为我缺少的 Windows 7 设置 Websockets?

更新....我正在使用 SignalR 0.4:

  <package id="SignalR" version="0.4.0" />
  <package id="SignalR.Hosting.AspNet" version="0.4.0.0" />
  <package id="SignalR.Js" version="0.4.0.1" />
  <package id="SignalR.Server" version="0.4.0.0" />
  <package id="SignalR.StructureMap" version="0.4.1" />

【问题讨论】:

    标签: signalr


    【解决方案1】:

    我在这里找到了答案:

    https://github.com/SignalR/SignalR/wiki/SignalR-JS-Client

    基本上:

    $.connection.hubs.start({ transport: 'longPolling' }, function() {
        console.log('connection started!');
    });
    

    【讨论】:

    • 更新到 SignalR 0.4,如果服务器支持它,它只会尝试 websockets。
    • 如果您使用的是 .NETFramework 4.5,它总是会尝试使用 websockets,因为目前没有很好的检测方法。
    • 不能将其配置为只尝试一次 websockets,如果失败则恢复为长轮询,而不是破坏事物并要求强制长轮询?
    • 是的,请阅读文档以获取更多信息github.com/SignalR/SignalR/wiki/SignalR-Client
    【解决方案2】:

    为了禁用服务器端的传输,您必须使用以下内容:

    using Microsoft.AspNet.SignalR;
    using Microsoft.AspNet.SignalR.Transports;
    using Owin;
    namespace MyApplication
    {
        public static class Startup
        {
            public static void ConfigureSignalR(IAppBuilder app)
            {
                // If using the global dependency resolver
                TurnOfForeverFrame(GlobalHost.DependencyResolver);
                app.MapSignalR();
            }
            public static void TurnOfForeverFrame(IDependencyResolver resolver)
            {
                var transportManager = resolver.Resolve<ITransportManager>() as TransportManager;
                transportManager.Remove("foreverFrame");
            }
        }
    }
    

    @reach4thelasers 的解决方案只在客户端禁用它,但客户端可以重新启用传输和连接。

    干杯。

    【讨论】:

      【解决方案3】:

      对于希望使用 asp.net core 3.1 在服务器上禁用它的任何人:

      public void Configure(IApplicationBuilder app, IHostingEnvironment env)
      {
          app.UseRouting();
      
          app.UseEndpoints(endpoints =>
          {
              endpoints.MapHub<ChatHub>("/chathub", options =>
              {
                  options.Transports =
                      HttpTransportType.WebSockets |
                      HttpTransportType.LongPolling;
              });
          });
      }
      

      来源:https://docs.microsoft.com/en-us/aspnet/core/signalr/configuration?view=aspnetcore-3.1&tabs=dotnet#advanced-http-configuration-options-1

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-20
        • 2015-08-07
        • 2012-12-17
        • 2021-09-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-30
        相关资源
        最近更新 更多