本帖最后由 KearneyKang 于 2020-10-30 16:14 编辑
背景:
ActiveReports14 .net core mvc 连接 MySQL 8.X 数据库Linux部署
本文将解决ActiveReports14 .net core mvc项目Linux部署遇到的一些常见问题
1:Linux 部署 .net core 环境配置
2:配置并修改.net core 程序默认启动端口
3:.net core ActiveReports Server 跨域访问的问题
4:ar14在后台动态修改数据源
1:添加host.json文件(用于配置程序默认启动端口),内容- {
- "url": "http://*:5005"
- }
复制代码
2:
Program.cs 添加
- public static IWebHostBuilder CreateWebHostBuilder(string[] args)
- {
- var configuration = new ConfigurationBuilder().SetBasePath(Environment.CurrentDirectory)
- .AddJsonFile("host.json")
- .Build();
- //一:配置文件指定端口
- //可以是多个端口用;分割
- //例如:http://*:5005;http://*:5006
- return WebHost.CreateDefaultBuilder(args)
- .UseUrls(configuration["url"])
- .UseStartup<Startup>();
- //二:运行时参数指定端口号
- //dotnet ActiveReportCore.dll --server.urls "http://*:5005;http://*:5006"
- }
复制代码
并在Main函数中调用
CreateWebHostBuilder(args).Build().Run();
3,Startup.cs添加跨域配置
- public void ConfigureServices(IServiceCollection services)
- {
- services
- .AddLogging(config =>
- {
- config.ClearProviders();
- if (Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == Environments.Development)
- {
- config.AddConsole();
- }
- })
- .AddReporting();
- services.AddCors(options =>
- {
- options.AddPolicy("AllowAll", builder =>
- {
- builder.SetIsOriginAllowed(_ => true)
- .AllowCredentials()
- .AllowAnyMethod()
- .AllowAnyHeader();
- //builder.SetIsOriginAllowed(origin => new Uri(origin).Host == "localhost") // 允许localhost访问
- //.AllowCredentials()
- //.AllowAnyMethod()
- //.AllowAnyHeader();
- });
- });
- services.AddMvc(options => options.EnableEndpointRouting = false);
- services.AddHttpClient();
- services.AddControllersWithViews();
- services.AddHttpContextAccessor();
- }
- public void Configure(IApplicationBuilder app,IWebHostEnvironment env, IHttpContextAccessor contextAccessor)
- {
- if (env.IsDevelopment())
- {
- app.UseDeveloperExceptionPage();
- }
- _contextAccessor = contextAccessor;
- Root = env.ContentRootPath;
- app.UseCors("AllowAll");
- app.UseReporting(settings =>
- {
- settings.UseCompression = true;
- settings.UseCustomStore(GetReport);
- settings.LocateDataSource = args =>
- {
- DataTable dt = new DataTable();
- if (args.DataSet.Query.DataSourceName == "DataSourceMessage")
- {
- if (args.DataSet.Name == "dsMessage")
- {
- //args.Parameters[0].Value.ToString();//获取报表参数
- //加载报表数据
- //dt = Program.dict[reportName](Program.GetMessage("")).Copy();
- }
- }
- return dt;
- };
- });
- app.UseMvc();
- app.UseHttpsRedirection();
- app.UseDefaultFiles();
- app.UseStaticFiles();
- app.UseRouting();
- app.UseAuthorization();
- app.UseEndpoints(endpoints =>
- {
- endpoints.MapControllerRoute(
- name: "default",
- pattern: "{controller=Home}/{action=Index}/{id?}");
- });
- }
- public object GetReport(string P)
- {
- this.reportName = P;//获取报表文件名称
- PageReport rep = new PageReport();
- //动态修改报表数据源连接字符串
- StringBuilder strConnection = new StringBuilder();
- strConnection.Append("Driver={MySQL ODBC 8.0 Unicode Driver};");
- strConnection.AppendFormat("Server={0};", domainHostname.ToString());
- strConnection.AppendFormat("Port={0};", domainPort.ToString());
- strConnection.AppendFormat("Database={0};", domainDatabase.ToString());
- strConnection.AppendFormat("User={0};", domainUser.ToString());
- strConnection.AppendFormat("Password={0};", domainPassword.ToString());
- strConnection.Append("Option=3;Allow User Variables=True");
- rep.Load(new FileInfo(string.Format(@"{0}/Reports/{1}", Root, reportName)));
- rep.Report.DataSources.First().ConnectionProperties.ConnectString = strConnection.ToString();
- return rep.Report;
- }
复制代码
4:发布程序,并将打包好的程序上传到Linux服务器
5:linux 安装 .NET Core
5.1:安装 .NET 之前,请运行以下命令,将 Microsoft 包签名密钥添加到受信任密钥列表,并添加 Microsoft 包存储库。 打开终端并运行以下命令:
sudo rpm -Uvh https://packages.microsoft.com/c ... -microsoft-prod.rpm
5.2:安装 .NET Core SDK或者(.NET 运行时,以下命令是安装 SDK)
sudo yum install dotnet-sdk-3.1
6:安装mysql-connector-odbc-8.0.17
下载驱动的路径(根据自己的服务器版本和数据库版本下载对应的驱动,并安装) https://downloads.mysql.com/archives/c-odbc/
7:进入项目目录启动项目,
dotnet 你的项目.dll (使用host.json配置的端口)
或者
dotnet 你的项目.dll --server.urls "http://*:5015"
|