找回密码
 立即注册

QQ登录

只需一步,快速开始

lyz880524 讲师达人认证

高级会员

153

主题

458

帖子

1167

积分

高级会员

积分
1167

微信认证勋章元老葡萄讲师达人

lyz880524 讲师达人认证
高级会员   /  发表于:2020-10-27 16:35  /   查看:3743  /  回复:6
本帖最后由 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文件(用于配置程序默认启动端口),内容
  1. {
  2.   "url": "http://*:5005"
  3. }
复制代码

2:
Program.cs 添加
  1. public static IWebHostBuilder CreateWebHostBuilder(string[] args)
  2.         {
  3.             var configuration = new ConfigurationBuilder().SetBasePath(Environment.CurrentDirectory)
  4.                                           .AddJsonFile("host.json")
  5.                                           .Build();
  6.             //一:配置文件指定端口
  7.             //可以是多个端口用;分割
  8.             //例如:http://*:5005;http://*:5006
  9.             return WebHost.CreateDefaultBuilder(args)
  10.                 .UseUrls(configuration["url"])
  11.                 .UseStartup<Startup>();

  12.             //二:运行时参数指定端口号
  13.             //dotnet ActiveReportCore.dll --server.urls "http://*:5005;http://*:5006"
  14.         }
复制代码

并在Main函数中调用
CreateWebHostBuilder(args).Build().Run();

3,Startup.cs添加跨域配置
  1. public void ConfigureServices(IServiceCollection services)
  2.         {
  3.             services
  4.                 .AddLogging(config =>
  5.                 {
  6.                     config.ClearProviders();

  7.                     if (Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == Environments.Development)
  8.                     {
  9.                         config.AddConsole();
  10.                     }
  11.                 })
  12.                 .AddReporting();

  13.             services.AddCors(options =>
  14.                 {
  15.                     options.AddPolicy("AllowAll", builder =>
  16.                      {
  17.                          builder.SetIsOriginAllowed(_ => true)
  18.                          .AllowCredentials()
  19.                          .AllowAnyMethod()
  20.                          .AllowAnyHeader();

  21.                          //builder.SetIsOriginAllowed(origin => new Uri(origin).Host == "localhost") // 允许localhost访问
  22.                          //.AllowCredentials()
  23.                          //.AllowAnyMethod()
  24.                          //.AllowAnyHeader();
  25.                      });
  26.                 });
  27.             services.AddMvc(options => options.EnableEndpointRouting = false);
  28.             services.AddHttpClient();
  29.             services.AddControllersWithViews();
  30.             services.AddHttpContextAccessor();
  31.         }


  32. public void Configure(IApplicationBuilder app,IWebHostEnvironment env, IHttpContextAccessor contextAccessor)
  33.         {
  34.             if (env.IsDevelopment())
  35.             {
  36.                 app.UseDeveloperExceptionPage();
  37.             }

  38.             _contextAccessor = contextAccessor;

  39.             Root = env.ContentRootPath;

  40.             app.UseCors("AllowAll");
  41.             app.UseReporting(settings =>
  42.             {
  43.                 settings.UseCompression = true;
  44.                 settings.UseCustomStore(GetReport);
  45.                 settings.LocateDataSource = args =>
  46.                 {
  47.                     DataTable dt = new DataTable();
  48.                     if (args.DataSet.Query.DataSourceName == "DataSourceMessage")
  49.                     {
  50.                         if (args.DataSet.Name == "dsMessage")
  51.                         {
  52.                             //args.Parameters[0].Value.ToString();//获取报表参数
  53.                             //加载报表数据
  54.                             //dt = Program.dict[reportName](Program.GetMessage("")).Copy();
  55.                         }
  56.                     }
  57.                     return dt;
  58.                 };

  59.             });
  60.             app.UseMvc();
  61.             app.UseHttpsRedirection();
  62.             app.UseDefaultFiles();
  63.             app.UseStaticFiles();

  64.             app.UseRouting();

  65.             app.UseAuthorization();
  66.             app.UseEndpoints(endpoints =>
  67.             {
  68.                 endpoints.MapControllerRoute(
  69.                     name: "default",
  70.                     pattern: "{controller=Home}/{action=Index}/{id?}");
  71.             });

  72.         }


  73. public object GetReport(string P)
  74.         {
  75.             this.reportName = P;//获取报表文件名称

  76.             PageReport rep = new PageReport();

  77.             //动态修改报表数据源连接字符串
  78.             StringBuilder strConnection = new StringBuilder();
  79.             strConnection.Append("Driver={MySQL ODBC 8.0 Unicode Driver};");
  80.             strConnection.AppendFormat("Server={0};", domainHostname.ToString());
  81.             strConnection.AppendFormat("Port={0};", domainPort.ToString());
  82.             strConnection.AppendFormat("Database={0};", domainDatabase.ToString());
  83.             strConnection.AppendFormat("User={0};", domainUser.ToString());
  84.             strConnection.AppendFormat("Password={0};", domainPassword.ToString());
  85.             strConnection.Append("Option=3;Allow User Variables=True");
  86.             rep.Load(new FileInfo(string.Format(@"{0}/Reports/{1}", Root, reportName)));
  87.             rep.Report.DataSources.First().ConnectionProperties.ConnectString = strConnection.ToString();

  88.             return rep.Report;
  89.         }
复制代码

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"



评分

参与人数 1金币 +1000 收起 理由
KearneyKang + 1000 赞一个!

查看全部评分

6 个回复

倒序浏览
KearneyKang讲师达人认证 悬赏达人认证
超级版主   /  发表于:2020-10-30 11:51:35
沙发
非常感谢你把自己使用中遇到的问题进行了一个总结然后分享出来。真正做到了经验分享,赠人玫瑰,手有余香
回复 使用道具 举报
lyz880524讲师达人认证
高级会员   /  发表于:2020-10-30 12:04:26
板凳
共同进步
回复 使用道具 举报
KearneyKang讲师达人认证 悬赏达人认证
超级版主   /  发表于:2020-10-30 16:12:01
地板
回复 使用道具 举报
lyz880524讲师达人认证
高级会员   /  发表于:2020-12-15 17:52:31
5#
回复 使用道具 举报
ly1331
注册会员   /  发表于:2020-12-21 14:42:20
6#
报表使用样式文件时会出现异常。调试发现是加载.rdlx-styles文件出现的,GetReport方法并不能处理此类文件
回复 使用道具 举报
lyz880524讲师达人认证
高级会员   /  发表于:2020-12-21 14:56:23
7#
目前暂时未使用到报表使用样式文
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部