小编Hoo*_*lum的帖子

如何防止 Chrome 暂停非前台选项卡/窗口?

我有一个网站,它使用 websockets 与服务器通信以流式传输实时金融报价。当页面不在前台时,大约 3 分钟后 Chrome 会终止套接字连接。可以在服务器日志中看到套接字断开连接。只要我在后台处理后的几分钟内将页面带到前台,套接字就会保持活动状态。

我知道 Chrome(可能还有其他基于 Chromium 的浏览器)会限制后台页面以节省电量、CPU 和内存。但是,我无法找到永久禁用给定 URL 的此功能的方法。

  • chrome://discards/ 允许我暂时禁用给定选项卡的功能,但仅限于关闭之前
  • 在后台定期 ping websocket 连接不会使套接字保持打开状态
  • 在应用程序模式下运行 Chrome(使用“--app=”命令行开关)不会保持套接字打开
  • kiosk 模式命令行开关似乎不再起作用(至少在 Chrome 89.0.4389.90 上)
  • 在 chrome://flags/ 下禁用遮挡检查也不会使套接字保持活动状态

我是否错过了什么,或者真的没有办法强制 Chrome 在所有情况下都保持某个 URL 处于活动状态?

谢谢

javascript google-chrome websocket

5
推荐指数
0
解决办法
164
查看次数

授权属性无法阻止 ASP.Net Core 3.0 Web API 中的请求

我正在尝试在 ASP.Net Core 3.0 Web Api 项目中使用基于 cookie 的身份验证。

目前,我的配置服务如下所示:

public void ConfigureServices(IServiceCollection services)
    {
        services.AddCors(options =>
        {
            options.AddPolicy("CorsPolicy",
                builder => builder.AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader());
        });

        services.AddAuthentication(options => 
            {
                options.DefaultScheme = "Cookies";
            })
            .AddCookie("Cookies", options => 
            {
                options.Cookie.Name = "auth_cookie";
                options.Cookie.SameSite = SameSiteMode.None;
                options.Events = new CookieAuthenticationEvents
                {
                    OnRedirectToLogin = redirectContext =>
                    {
                        redirectContext.HttpContext.Response.StatusCode = 401;
                        return Task.CompletedTask;
                    }
                };
            });

        services.AddAuthorization();

        services.AddControllers();
    }
Run Code Online (Sandbox Code Playgroud)

我的配置方法如下所示:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseCors("CorsPolicy");

        app.UseHttpsRedirection();

        app.UseAuthentication();

        app.UseAuthorization(); …
Run Code Online (Sandbox Code Playgroud)

c# authentication authorization asp.net-core-webapi

2
推荐指数
1
解决办法
3070
查看次数

IDispatchMessageFormatter未通过ServiceBehavior应用

我需要将自定义消息格式化程序应用于服务中的所有操作.

我没有手动将OperationBehavior应用于所有操作,而是试图在ServiceBehavior中循环遍历所有操作(我的序列化程序的细节并不重要,只是它实现了IDispatchMessageFormatter):

public void ApplyDispatchBehavior(ServiceDescription serviceDescription, System.ServiceModel.ServiceHostBase serviceHostBase) {
    foreach (ChannelDispatcher channelDispatcher in serviceHostBase.ChannelDispatchers) {
        foreach (EndpointDispatcher endpointDispatcher in channelDispatcher.Endpoints.Where(e => !e.IsSystemEndpoint)) {
            foreach (DispatchOperation dispatchOperation in endpointDispatcher.DispatchRuntime.Operations) {
                LoggedOperationSerializer serializer = new LoggedOperationSerializer(dispatchOperation.Formatter);
                dispatchOperation.Formatter = serializer;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

串行器似乎设置得很好,没有错误.但是,当我设置断点和调试时,永远不会触发LoggedOperationSerializer上的DeserializeRequest方法.

相反,如果我在这样的OperationBehavior中应用格式化程序:

public void ApplyDispatchBehavior(OperationDescription operationDescription, DispatchOperation dispatchOperation) {
    LoggedOperationSerializer serializer = new LoggedOperationSerializer(dispatchOperation.Formatter);
    dispatchOperation.Formatter = serializer;
}
Run Code Online (Sandbox Code Playgroud)

然后按预期命中DeserializeRequest方法.

如果我同时应用ServiceBehvior和OperationBehavior并按预期附加调试器,则首先触发显示的第一个代码块,迭代服务上的所有操作,并设置格式化程序.但是,当命中OperationBehavior的ApplyDispatchBehavior时,上面设置的格式化程序已"掉线",并且已被默认的CompositeDispatchFormatter替换.

我真的不想手动将OperationBehavior应用于所有操作以使其工作......任何关于为什么会发生什么的想法?

这是在使用WebHttpBinding的情况下完全相关,我不知道为什么会这样.

wcf

0
推荐指数
1
解决办法
1096
查看次数