c# - SignalR 自主机断开超时(没有 Global.asax)

标签 c# asp.net signalr

我正在使用 OWIN 自托管的 SignalR 2.0。我正在尝试修改 SignalR ConnectionTimeout 属性,但它似乎不适用于 OWIN Startup 类。

当前尝试

using System;
using Microsoft.AspNet.SignalR;
using Microsoft.Owin.Cors;
using Owin;

namespace Test
{
    internal class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            GlobalHost.Configuration.ConnectionTimeout = TimeSpan.FromSeconds(10);
            app.UseCors(CorsOptions.AllowAll);
            app.MapSignalR();
        }
    }
}

我还尝试添加从另一个项目复制的我自己的 Global.asax 文件。但是,我似乎无法解析 System.Web.HttpApplication 扩展。

using System;
using Microsoft.AspNet.SignalR;

namespace Test
{
    public class Global : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            GlobalHost.Configuration.ConnectionTimeout = TimeSpan.FromSeconds(10);
        }
    }
}

有什么建议可以解决这个问题吗?

文档链接:SignalR Configuration

最佳答案

在调用启动之前,您需要调用GlobalHost。基本上,如果您的代码如下所示:

using System;
using Microsoft.AspNet.SignalR;
using Microsoft.Owin.Hosting;
using Owin;
using Microsoft.Owin.Cors;

namespace SignalRSelfHost
{
class Program
{
    static void Main(string[] args)
    {
        // This will *ONLY* bind to localhost, if you want to bind to all addresses
        // use http://*:8080 to bind to all addresses. 
        // See http://msdn.microsoft.com/en-us/library/system.net.httplistener.aspx 
        // for more information.
        string url = "http://localhost:8080";
        using (WebApp.Start(url))
        {
            Console.WriteLine("Server running on {0}", url);
            Console.ReadLine();
        }
    }
}
class Startup
{
    public void Configuration(IAppBuilder app)
    {
        GlobalHost.Configuration.ConnectionTimeout  =   new TimeSpan(0, 0, 110);
        GlobalHost.Configuration.DisconnectTimeout  =   new TimeSpan(0, 0, 60);
        GlobalHost.Configuration.KeepAlive          =   new TimeSpan(0, 0, 5);
        app.UseCors(CorsOptions.AllowAll);
        app.MapSignalR();
    }
}
public class MyHub : Hub
{
    public void Send(string name, string message)
    {
        Clients.All.addMessage(name, message);
    }
}
} 

它应该看起来像这样:

using System;
using Microsoft.AspNet.SignalR;
using Microsoft.Owin.Hosting;
using Owin;
using Microsoft.Owin.Cors;

namespace SignalRSelfHost
{
class Program
{
    static void Main(string[] args)
    {
        // This will *ONLY* bind to localhost, if you want to bind to all addresses
        // use http://*:8080 to bind to all addresses. 
        // See http://msdn.microsoft.com/en-us/library/system.net.httplistener.aspx 
        // for more information.
        string url = "http://localhost:8080";
        GlobalHost.Configuration.ConnectionTimeout  =   new TimeSpan(0, 0, 110);
        GlobalHost.Configuration.DisconnectTimeout  =   new TimeSpan(0, 0, 60);
        GlobalHost.Configuration.KeepAlive          =   new TimeSpan(0, 0, 5);
        using (WebApp.Start(url))
        {
            Console.WriteLine("Server running on {0}", url);
            Console.ReadLine();
        }
    }
}
class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.UseCors(CorsOptions.AllowAll);
        app.MapSignalR();
    }
}
public class MyHub : Hub
{
    public void Send(string name, string message)
    {
        Clients.All.addMessage(name, message);
    }
}
} 

关于c# - SignalR 自主机断开超时(没有 Global.asax),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27712784/

相关文章:

c# - Azure 存储计算的 MD5 与现有属性不匹配

带背板的 SignalR .NET 客户端 : clarification

c# - 如何将 HttpClientHandler 添加到 url?

c# - 如何将 asp.net web 应用程序与 outlook 连接?

c# - 使用作为公共(public)依赖项的私有(private)静态字段对静态类进行单元测试

javascript - 将 Typeahead 与 SignalR 结合使用

c# - 有可能 signalR 客户端网络连接另一台 PC 上的服务器吗?

c# - 在代码隐藏中创建 DataTemplate

asp.net - 如何在 ASP.NET 中为不同的 URL 设置不同的超时

c# - 在 linq 查询中使用索引作为额外的 id