问题描述
我有一个出色的WASM项目,该项目在开发和本地生产(在我的计算机上)上运行良好,但在生产linux服务器上则无法正常运行。
当我将项目发布到生产服务器(ubuntu 20.04)时,项目会保持发送请求(仅在客户端上-不在服务器上)
可能是什么?我没有安装SSL证书,因此所有请求都是http而不是https。
https://gfycat.com/reliablefarawaycurlew
客户端项目中的Program.cs
public class Program
{
public static async Task Main(string[] args)
{
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("app");
builder.Services.AddHttpClient("BlazorAppManagerWeb.ServerAPI",client => client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress))
.AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>();
builder.Services.AddSingleton(new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
ConfiguteServices(builder.Services);
var host = builder.Build();
var js = host.Services.GetrequiredService<IJSRuntime>();
//var culture = await js.InvokeAsync<string>("getFromLocalStorage","culture");
string culture = null;
CultureInfo selectedCulture;
if (culture == null)
{
selectedCulture = new CultureInfo("he-IL");
}
else
{
selectedCulture = new CultureInfo(culture);
}
CultureInfo.DefaultThreadCurrentCulture = selectedCulture;
CultureInfo.DefaultThreadCurrentUICulture = selectedCulture;
await host.RunAsync();
}
public static void ConfiguteServices(IServiceCollection services)
{
services.AddLocalization();
services.AddScoped<IHttpService,HttpService>();
services.AddScoped<Repository.IEntityRepository,Repository.EntityRepository>();
services.AddScoped<IMyVehicleRepository,MyVehicleRepository>();
services.AddScoped<IMyVehicleCommentRepository,MyVehicleCommentRepository>();
services.AddScoped<IVehicleTypeRepository,VehicleTypeRepository>();
services.AddScoped<IVehicleManufacturerRepository,VehicleManufacturerRepository>();
services.AddScoped<IVehicleModelRepository,VehicleModelRepository>();
services.AddScoped<IMyVehicleStatusRepository,MyVehicleStatusRepository>();
services.AddScoped<IDocumentRepository,DocumentRepository>();
services.AddScoped<IItemRepository,ItemRepository>();
services.AddScoped<IMissionRepository,MissionRepository>();
services.AddScoped<ICustomerVehicleRepository,CustomerVehicleRepository>();
services.AddScoped<ICustomerVehicleStatusRepository,CustomerVehicleStatusRepository>();
services.AddScoped<IMissionCardRepository,MissionCardRepository>();
services.AddScoped<IBankRepository,BankRepository>();
services.AddScoped<IDepositRepository,DepositRepository>();
services.AddScoped<IGeneralRepository,GeneralRepository>();
services.AddScoped<IEntityCommentRepository,EntityCommentRepository>();
services.AddScoped<IEntityTodoRepository,EntityTodoRepository>();
services.AddScoped<ICalendarRepository,CalendarRepository>();
services.AddScoped<IReportsRepository,ReportsRepository>();
services.AddScoped<Repository.InSControl.IEntityRepository,Repository.InSControl.EntityRepository>();
services.AddScoped<IdisplayMessage,displayMessage>();
services.AddFileReaderService(options => options.InitializeOnFirstCall = true);
/* LOCALIZATION MANUALLY SET TO HEBREW
var culture = new CultureInfo("he-IL");
CultureInfo.DefaultThreadCurrentCulture = culture;
CultureInfo.DefaultThreadCurrentUICulture = culture;*/
// Supply HttpClient instances that include access tokens when making requests to the server project
services.AddTransient(sp => sp.GetrequiredService<IHttpClientFactory>().CreateClient("BlazorAppManagerWeb.ServerAPI"));
services.AddApiAuthorization();
}
}
服务器中的Program.cs
public class Program
{
public static void Main(string[] args)
{
var webHost = CreateHostBuilder(args).Build();
using(var scope = webHost.Services.CreateScope())
{
var services = scope.ServiceProvider;
var context = services.GetService<ApplicationDbContext>();
context.Database.Migrate();
var context2 = services.GetService<ControlDbContext>();
context2.Database.Migrate();
}
webHost.Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
客户端项目中的Startup.cs
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
// For more @R_588_4045@ion on how to configure your application,visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>();
services.AddDbContext<ControlDbContext>(options =>
{
options.UsesqlServer(
Configuration.GetConnectionString("ControlConnection"));
});
services.AddDefaultIdentity<ApplicationUser>(options => {
options.SignIn.RequireConfirmedAccount = false;
options.Password.requiredigit = false;
options.Password.RequireLowercase = false;
options.Password.RequireUppercase = false;
options.Password.RequireNonAlphanumeric = false;
})
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddTransient<IEmailSender,EmailSender>();
services.AddIdentityServer()
.AddApiAuthorization<ApplicationUser,ApplicationDbContext>();
services.ConfigureExternalCookie(options => {
options.Cookie.IsEssential = true;
options.Cookie.SameSite = SameSiteMode.Unspecified; //SameSiteMode.Unspecified in .NET Core 3.1
options.ExpireTimeSpan = TimeSpan.FromDays(365);
});
services.ConfigureApplicationCookie(options => {
options.Cookie.IsEssential = true;
options.Cookie.SameSite = SameSiteMode.Unspecified; //SameSiteMode.Unspecified in .NET Core 3.1
options.ExpireTimeSpan = TimeSpan.FromDays(365);
});
services.AddAuthentication()
.AddIdentityServerJwt();
services.AddAutoMapper(typeof(Startup));
services.AddScoped<IFileStorageService,InAppStorageService>();
services.AddHttpContextAccessor();
services.AddTransient<IUserRepository,UserRepository>();
services.AddTransient<IEntityRepository,EntityRepository>();
services.AddMvc().AddNewtonsoftJson(options=> options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);
services.AddControllersWithViews();
services.AddRazorPages();
services.AddTransient<CustomerVehiclesController,CustomerVehiclesController>();
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("he-IL");
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app,IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
app.UseWebAssemblyDebugging();
}
else
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios,see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseBlazorFrameworkFiles();
app.UseStaticFiles();
app.UseRouting();
app.UseIdentityServer();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapControllers();
endpoints.MapFallbackToFile("index.html");
});
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)