【问题标题】:NET Core Server Side multiple session BlazorNET Core 服务器端多会话 Blazor
【发布时间】:2019-09-09 14:59:54
【问题描述】:

我正在尝试在我的服务器上托管我的 Blazor 应用程序。 我整个夏天都花在它上面,我只是意识到每次我在新设备上打开我的网站时,它不会创建一个从零开始的新会话,而是继续我离开它的地方。最糟糕的是它背后有一个登录系统,所以我现在觉得超级笨。

我真的需要一个关于如何解决这个“不小的”问题的重要提示。 有没有办法让服务器在每次有人打开网站时创建新会话(而不会让其他用户松散)?

解决方案应该改用客户端模板,但性能真的很慢。

更新: 帐户“用户密码”是: - 用户用户 - 测试测试

Download project sample (requires Net Core 3.0)

[SOLUTION] itminus 找到了我的问题的解决方案。

您还必须在 Startup.cs 中添加 ConfigureServices services.AddScoped<Storage>();

 public void ConfigureServices(IServiceCollection services)
        {
            services.AddRazorPages();
            services.AddServerSideBlazor();
            services.AddScoped<Storage>();
        }

【问题讨论】:

  • 嗨,这听起来像是一个可以解决的问题,但我们需要更多信息来解决它。在完全不熟悉 blazor 的情况下,我猜我们至少需要了解一些您在其中建立会话的代码隐藏。
  • 我添加了一小部分代码
  • 首先,SignalR 应用程序不支持会话...我不确定我是否理解您的描述。 “在新设备上”是什么意思?一个不同的浏览器,比如你第一次使用 FF 访问你的应用程序,然后是谷歌浏览器?解释一下...您的应用程序如何创建新会话?你怎么知道“新会话”是“从零开始”?

标签: session asp.net-core blazor


【解决方案1】:

每次我在新设备上打开我的网站时,它都不会创建从零开始的新会话,而是从我离开的地方继续。

我检查了您的代码,发现您正在使用单例模式来初始化Storage。如果我理解正确,这个Storage 单例实例将在不同用户(也跨不同设备)之间共享。由于此实例将用于呈现 Main.razor 页面,因此您现在会遇到并发问题。

要解决该问题,应将存储实例限制在某个特定连接内。当您使用 Blazor 服务器端时,您可以将存储注册为 Scoped Service

在 Blazor Server 应用中,范围内的服务注册范围仅限于连接。出于这个原因,对于应该限定在当前用户范围内的服务,最好使用范围服务,即使当前意图是在浏览器中运行客户端。

首先,移除静态单例实例:

公共类存储 { 私有静态存储实例; 私有存储() { 罢工> } 公共静态存储 GetInstance() { 罢工> if (Storage.instance == null) Storage.instance = new Storage(); 返回 Storage.instance; 罢工> } 罢工> public Listlist {get;set;} = new List(); 公共字符串密码 {get;set;} }

将此类注册为范围服务:

services.AddScoped<Storage>();

然后在你的Login.razorMain.razor 中注入这个服务:

@inject project.Storage Storage

最后,您需要将所有Storage.GetInstance(). 更改为Storage.

    Storage.list = Order;
    ...
    Storage.password = password;

我注意到您还使用单例模式创建了Importer/Additional 实例。我建议您应该重构它们以以类似的方式使用服务注入。

【讨论】:

  • 非常感谢。这就是解决方案。还有一小部分你必须在 Startup.cs 中添加services.AddScoped&lt;Storage&gt;();。我在主帖中写过。
猜你喜欢
  • 2020-06-22
  • 2019-02-20
  • 2020-09-30
  • 2019-10-06
  • 2023-03-26
  • 1970-01-01
  • 2019-05-23
  • 2020-11-26
  • 2019-04-19
相关资源
最近更新 更多