如何设置:services.AddSingleton<ApiResponseService>();在 Asp.net 项目中具有 "server start -- till "infinity"" 的生命周期
How to setup : services.AddSingleton<ApiResponseService>(); with a lifetime of "server start -- till "infinity"" in a Asp.net project
我不确定问题是出在我这边(我的代码)还是服务器设置对不良行为负责。
我用框架 Blazor 做了一个 Asp.net 单页项目。它类似于 MVC Asp.net。在我的 Blazor 项目中,我在 startup.cs 文件中设置了一个依赖项注入服务。并使其生命周期为 singelton(据我所知,每个服务器一个对象实例开始为“无限”)。
在该服务中,我存储了 Api 调用的响应,以便数据就在“永久内存”中。
这就是理论(预期的行为)。
实际上,我的数据就在那里。我checked/look它从不同的IPadresses/PC/Mobile起来一切正常,Api数据显示给用户。但是数据在一定时间后就会丢失,而不是“永远”在那里(我们说的是它只需要几分钟 - >数据丢失)。会不会是我的提供商因为不活动而重置了我的 webside/server?还是我在我的代码中犯了错误导致了这种损失?我认为只要服务在服务器上运行,singelton 服务就会持续。
我尝试在此处提供正确的代码位:
Asp.net 核心 Blazor 服务器端项目:
文件-> Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddServerSideBlazor();
services.AddSingleton<ApiResponseService>();
}
文件-> 我的 ApiResponseService Class
public class ApiResponseService
{
//--NowCast
public List<ClimaCellNowCast> LstClimaCellNowCasts { get; set; }
//create a HttpClient with the correct apiCallStringApikey etc
public ApiCallCreateClient NowCastHttp { get; } = new ApiCallCreateClient(Const.NowCastApiKeyCallString);
//...
//--Update Methode
public async Task<bool> UpdateWeatherData()
{
LstClimaCellNowCasts = await this.GetWeatherDataApiAsync<ClimaCellNowCast>(this.NowCastHttp);
return updateOkay;
}
public async Task<List<T>> GetWeatherDataApiAsync<T>(ApiCallCreateClient clientT)
{
List<T> climaCell = new List<T>();
using HttpResponseMessage response = await
clientT.Client.GetAsync(clientT.Client.BaseAddress);
if (response.IsSuccessStatusCode)
{
clientT.MyApiJsonResponse = await response.Content.ReadAsStringAsync();
// nugetPacket -> Newtonsoft.Json
climaCell = JsonConvert.DeserializeObject<List<T>>(clientT.MyApiJsonResponse);
}
return climaCell;
}
}
文件 -> Blazor 组件 // 网页端 //
@inject ApiResponseService apiCall;
//...
@apiCall.doSomething //show the Api response data
//...
@code{
protected override async void OnInitialized()
{
UpdateSuccessfull = await apiCall.UpdateWeatherData();
this.StateHasChanged();
}
bool UpdateSuccessfull;
private async Task GetWeatherData()
{
UpdateSuccessfull = await apiCall.UpdateWeatherData();
}
}
有什么方法可以让我的 api 回复在一段时间后不会“丢失”?
^不好
我的提供商回复了我的电子邮件:...应用程序池空闲时间默认设置为 5 分钟。 ... 所以这意味着我的单身生活时间是 5 分钟。 ;) 至少我现在知道发生了什么
我不确定问题是出在我这边(我的代码)还是服务器设置对不良行为负责。 我用框架 Blazor 做了一个 Asp.net 单页项目。它类似于 MVC Asp.net。在我的 Blazor 项目中,我在 startup.cs 文件中设置了一个依赖项注入服务。并使其生命周期为 singelton(据我所知,每个服务器一个对象实例开始为“无限”)。
在该服务中,我存储了 Api 调用的响应,以便数据就在“永久内存”中。 这就是理论(预期的行为)。 实际上,我的数据就在那里。我checked/look它从不同的IPadresses/PC/Mobile起来一切正常,Api数据显示给用户。但是数据在一定时间后就会丢失,而不是“永远”在那里(我们说的是它只需要几分钟 - >数据丢失)。会不会是我的提供商因为不活动而重置了我的 webside/server?还是我在我的代码中犯了错误导致了这种损失?我认为只要服务在服务器上运行,singelton 服务就会持续。 我尝试在此处提供正确的代码位:
Asp.net 核心 Blazor 服务器端项目:
文件-> Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddServerSideBlazor();
services.AddSingleton<ApiResponseService>();
}
文件-> 我的 ApiResponseService Class
public class ApiResponseService
{
//--NowCast
public List<ClimaCellNowCast> LstClimaCellNowCasts { get; set; }
//create a HttpClient with the correct apiCallStringApikey etc
public ApiCallCreateClient NowCastHttp { get; } = new ApiCallCreateClient(Const.NowCastApiKeyCallString);
//...
//--Update Methode
public async Task<bool> UpdateWeatherData()
{
LstClimaCellNowCasts = await this.GetWeatherDataApiAsync<ClimaCellNowCast>(this.NowCastHttp);
return updateOkay;
}
public async Task<List<T>> GetWeatherDataApiAsync<T>(ApiCallCreateClient clientT)
{
List<T> climaCell = new List<T>();
using HttpResponseMessage response = await
clientT.Client.GetAsync(clientT.Client.BaseAddress);
if (response.IsSuccessStatusCode)
{
clientT.MyApiJsonResponse = await response.Content.ReadAsStringAsync();
// nugetPacket -> Newtonsoft.Json
climaCell = JsonConvert.DeserializeObject<List<T>>(clientT.MyApiJsonResponse);
}
return climaCell;
}
}
文件 -> Blazor 组件 // 网页端 //
@inject ApiResponseService apiCall;
//...
@apiCall.doSomething //show the Api response data
//...
@code{
protected override async void OnInitialized()
{
UpdateSuccessfull = await apiCall.UpdateWeatherData();
this.StateHasChanged();
}
bool UpdateSuccessfull;
private async Task GetWeatherData()
{
UpdateSuccessfull = await apiCall.UpdateWeatherData();
}
}
有什么方法可以让我的 api 回复在一段时间后不会“丢失”? ^不好
我的提供商回复了我的电子邮件:...应用程序池空闲时间默认设置为 5 分钟。 ... 所以这意味着我的单身生活时间是 5 分钟。 ;) 至少我现在知道发生了什么