部署dotnet Core Web API

上一步的文章,是我们公司最核心的一个ORM组件,在中标麒麟系统完成了一个插入数据的任务,这一步是将正式的从dot net framework 迁移到 dotnet core 的项目,部署运行在中标麒麟系统中。

项目预览

现有从dotnet framework 迁移过来的一个 dotnet core web api 项目,准备部署中标麒麟系统上测试运行,下面是项目截图:

运行 & 解决

将文件上传到服务器上,然后执行命令运行:

  1. [root@gumis02 API]# dotnet Beyondbit.One.BUA.API.dll
  2. Error:
  3. An assembly specified in the application dependencies manifest (Beyondbit.One.BUA.API.deps.json) was not found:
  4. package: 'Microsoft.ApplicationInsights.AspNetCore', version: '2.1.1'
  5. path: 'lib/netstandard1.6/Microsoft.ApplicationInsights.AspNetCore.dll'
  6. This assembly was expected to be in the local runtime store as the application was published using the following target manifest files:
  7. aspnetcore-store-2.0.0-linux-x64.xml;aspnetcore-store-2.0.0-osx-x64.xml;aspnetcore-store-2.0.0-win7-x64.xml;aspnetcore-store-2.0.0-win7-x86.xml
  8. [root@gumis02 API]#

果不既然错误可能会迟到,但是绝不缺席,显示的错误是在开发过程中应用的nuget dll 找不到。这个问题是个小问题,已经有同学写了文章,Fix *.deps.json was not found,文章提到的解决办法:

增加如下一行到 csjproj文件中即可:false

最后csjproj文件看上去像这个样子:

  1. <PropertyGroup>
  2. <TargetFramework>netcoreapp2.0</TargetFramework>
  3. <PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest>
  4. </PropertyGroup>

重新发布项目,然后运行上面的问题已经解决,出现其他的问题:

  1. [root@gumis02 API]# dotnet Beyondbit.One.BUA.API.dll
  2. warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
  3. No XML encryptor configured. Key {0372b52e-5124-4655-871b-906a0467a642} may be persisted to storage in unencrypted form.
  4. Application startup exception: System.InvalidOperationException: No service for type 'Microsoft.AspNetCore.Http.IHttpContextAccessor' has been registered.
  5. at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
  6. at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
  7. at Beyondbit.Framework.StaticHttpContextExtensions.UseStaticHttpContext(IApplicationBuilder app, HttpContextOptions options)
  8. at Beyondbit.One.BUA.API.Startup.Configure(IApplicationBuilder app, IHostingEnvironment env) in E:\\u5de5\u4f5c\u533a\03 \u4e92\u8054\u7f51\03 \u7edf\u4e00\u7cfb\u5217\01_TFS\03\u7248\u672c\u7ba1\u7406\Beyondbit E-GOV Base System Suite\\u7edf\u4e00\u6388\u6743\CoreV1\Beyondbit.One.BUA.API\Startup.cs:line 49
  9. --- End of stack trace from previous location where exception was thrown ---
  10. at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
  11. at Microsoft.AspNetCore.Hosting.ConventionBasedStartup.Configure(IApplicationBuilder app)
  12. at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
  13. crit: Microsoft.AspNetCore.Hosting.Internal.WebHost[6]
  14. Application startup exception
  15. System.InvalidOperationException: No service for type 'Microsoft.AspNetCore.Http.IHttpContextAccessor' has been registered.
  16. at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
  17. at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
  18. at Beyondbit.Framework.StaticHttpContextExtensions.UseStaticHttpContext(IApplicationBuilder app, HttpContextOptions options)
  19. at Beyondbit.One.BUA.API.Startup.Configure(IApplicationBuilder app, IHostingEnvironment env) in E:\\u5de5\u4f5c\u533a\03 \u4e92\u8054\u7f51\03 \u7edf\u4e00\u7cfb\u5217\01_TFS\03\u7248\u672c\u7ba1\u7406\Beyondbit E-GOV Base System Suite\\u7edf\u4e00\u6388\u6743\CoreV1\Beyondbit.One.BUA.API\Startup.cs:line 49
  20. --- End of stack trace from previous location where exception was thrown ---
  21. at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
  22. at Microsoft.AspNetCore.Hosting.ConventionBasedStartup.Configure(IApplicationBuilder app)
  23. at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
  24. Unhandled Exception: System.InvalidOperationException: No service for type 'Microsoft.AspNetCore.Http.IHttpContextAccessor' has been registered.
  25. at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
  26. at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
  27. at Beyondbit.Framework.StaticHttpContextExtensions.UseStaticHttpContext(IApplicationBuilder app, HttpContextOptions options)
  28. at Beyondbit.One.BUA.API.Startup.Configure(IApplicationBuilder app, IHostingEnvironment env) in E:\\u5de5\u4f5c\u533a\03 \u4e92\u8054\u7f51\03 \u7edf\u4e00\u7cfb\u5217\01_TFS\03\u7248\u672c\u7ba1\u7406\Beyondbit E-GOV Base System Suite\\u7edf\u4e00\u6388\u6743\CoreV1\Beyondbit.One.BUA.API\Startup.cs:line 49
  29. --- End of stack trace from previous location where exception was thrown ---
  30. at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
  31. at Microsoft.AspNetCore.Hosting.ConventionBasedStartup.Configure(IApplicationBuilder app)
  32. at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
  33. at Microsoft.AspNetCore.Hosting.WebHostBuilder.Build()
  34. at Beyondbit.One.BUA.API.Program.Main(String[] args) in E:\\u5de5\u4f5c\u533a\03 \u4e92\u8054\u7f51\03 \u7edf\u4e00\u7cfb\u5217\01_TFS\03\u7248\u672c\u7ba1\u7406\Beyondbit E-GOV Base System Suite\\u7edf\u4e00\u6388\u6743\CoreV1\Beyondbit.One.BUA.API\Program.cs:line 17
  35. \u5df2\u653e\u5f03 (core dumped)
  36. [root@gumis02 API]#

错误提示确实依赖:

在Starpup.cs 加入一段话:

  1. services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

如:

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
  4. services.AddMvc(options =>
  5. {
  6. options.Filters.Add<IdentityActionFilter>();
  7. options.Filters.Add<JsonpActionFilter>();
  8. });
  9. services.AddDistributedMemoryCache();
  10. services.AddSession();
  11. services.AddCors();
  12. }

最后运行成功了:

  1. [root@gumis02 API]# dotnet Beyondbit.One.BUA.API.dll
  2. Hosting environment: Production
  3. Content root path: /var/ftp/uffice/BUA One/API
  4. Now listening on: http://localhost:5000
  5. Application started. Press Ctrl+C to shut down.

增加多域名,多IP支持

如上面的步骤,在服务器内部使用http://localhost:5000,但是在服务器外用 http://服务器IP:5000 访问的时候访问不到,而且是防火墙在禁用的情况下。 在服务器查看端口开放,使用以下命令:

  1. [root@gumis02 ~]# netstat -an | grep 5000
  2. tcp 0 0 127.0.0.1 5000 :::* LISTEN
  3. tcp 0 0 ::1 5000 :::* LISTEN
  4. [root@gumis02 ~]#

可以看到服务器5000端口是针对 127.0.0.1和localhost才可以访问到,这两个都是在服务器内部使用的。

按照.net core 启动域名及端口配置 文章中 linux环境一节说明的配置,将代码改造以下,支持在服务器外访问。

  1. 首先在解决方案中添加一个文件hosting.josn,内容如下:
  1. {
  2. "server.urls": "http://*:5000"
  3. }

然后在program.cs文件中修改启动代码:

  1. namespace Beyondbit.One.BUA.API
  2. {
  3. public class Program
  4. {
  5. public static void Main(string[] args)
  6. {
  7. BuildWebHost(args).Run();
  8. }
  9. public static IWebHost BuildWebHost(string[] args)
  10. {
  11. var config = new ConfigurationBuilder()
  12. .SetBasePath(Directory.GetCurrentDirectory())
  13. .AddJsonFile("hosting.json", optional: true)
  14. .Build();
  15. var host = new WebHostBuilder()
  16. .UseKestrel()
  17. .UseConfiguration(config)
  18. .UseContentRoot(Directory.GetCurrentDirectory())
  19. .UseIISIntegration()
  20. .UseStartup<Startup>()
  21. .Build();
  22. return host;
  23. }
  24. }
  25. }

编译发布到服务器上,运行站点,然后查看命令:

  1. [root@gumis02 ~]# netstat -an | grep 5000
  2. tcp 0 0 ::: 5000 :::* LISTEN
  3. [root@gumis02 ~]#

可以看到 5000前面变成了 :::,而不是第一次的127.0.0.1或::1,这代表5000端口任何ip指向到这个服务器,都可以通过IP:5000访问,在服务器外用浏览器测试看到效果正常。

国产中标麒麟Linux部署dotnet core 环境并运行项目 (三) 部署运行WEB API项目的更多相关文章

  1. Linux - 安装 dotnet core 环境

    Linux -  安装 dotnet core 环境 系统环境:CentOS7 官方安装指导 https://www.microsoft.com/net/learn/get-started/linux ...

  2. 国产中标麒麟Linux部署dotnet core 环境并运行项目 (一) 安装dotnet core

    背景 根据我之前写的文章 将 Net 项目升级 Core项目经验:(一)迁移Net项目为Net Core\Standard项目,我们将公司内部最核心的ORM框架迁移到net core 上面,并在win ...

  3. 国产中标麒麟Linux部署dotnet core 环境并运行项目 (二) 部署运行控制台项目

    背景 在上一篇文章安装dotnet core,已经安装好dotnet core了.之前只是安装成功了dotnet, 输入dotnet --info,可以确认安装成功了,但是在运行代码时,还是报错了,本 ...

  4. 边缘化搭建 DotNet Core 2.1 自动化构建和部署环境(下)

    写在前面 本篇文章是上一篇边缘化搭建 DotNet Core 2.1 自动化发布和部署(上)的后续操作,本文主要讲解如何开启Docker Remote API,开启Remote API后的权限安全问题 ...

  5. Linux安装.Net core 环境并运行项目

    原文:Linux安装.Net core 环境并运行项目 一 安装环境 1.  从微软官网下载 Linux版本的.NetCoreSdk 2.0 安装包 打开终端: 第一步: sudo yum insta ...

  6. Docker 部署Dotnet Core MVC项目

    原文:Docker 部署Dotnet Core MVC项目 1.dotnet core创建项目 dotnet new mvc -o myweb cd myweb 然后就是业务代码的编辑,增删改查乱七八 ...

  7. 部署Dotnet Core应用到Kubernetes(一)

    最近闲了点,写个大活:部署Dotnet应用到K8s.   写在前边的话 一直想完成这个主题.但这个主题实在太大了,各种拖延症的小宇宙不时爆发一下,结果就拖到了现在.   这个主题,会是一个系列.在这个 ...

  8. 在Docker容器中运行.Net Core web Api项目

    安装Docker环境 参考本人这篇<CentOS 7 下Docker的安装>文章进行安装以及环境配置,这里不做赘述. 通过.NetCore开发WebApi项目 1. 创建.Net Core ...

  9. 详解Net Core Web Api项目与在NginX下发布

    前言 本文将介绍Net Core的一些基础知识和如何NginX下发布Net Core的WebApi项目. 测试环境 操作系统:windows 10 开发工具:visual studio 2019 框架 ...

随机推荐

  1. EOS多节点同步代码分析

    EOS version: 1.0.7 一. 配置文件的修改 EOS的节点同步流程是通过p2p来完成,在nodeos的配置文件config.ini中填写,其默认路径为~/.local/share/eos ...

  2. ios 容错处理AvoidCrash

    程序因为很多原因容易出现崩溃问题,比如数组越界.空字符串等造成的崩溃 // 在AppDelegate 写如下代码 初始化防止程序因数组和字符串等崩溃问题 //初始化 AvoidCrash (常用对象防 ...

  3. HDU 2103 Family Plan

    题目HDU 2103:http://acm.hdu.edu.cn/showproblem.php?pid=2103 Problem Description As far as we known,the ...

  4. :input获得焦点时被弹出键盘挡住解决办法

    这个是移动端非常常见的bug了,这里说下综合的解决办法,因为有时候你的办法就是会失效.. 上代码 /*input框调起输入法盖住输入问题*/$('input[type="text" ...

  5. Eclipse设置控制台字体

    打开 Window - preferences-- general - appearance - colors and fonts --debug - console font 进行设置.

  6. 根据不同环境配置pom

    clean install clean package -P jt808_dev clean package -P tanway_test -X gps-parent <?xml version ...

  7. JPA教程

    http://www.yiibai.com/jpa/jpa_criteria_api.html

  8. c#spinLock使用

        版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u011915028/article/details/53011811 一下解释摘自msdn  ...

  9. vs2017通过snippet代码片断进行标准化注释

    我们在进行团队开发时,类的注释已经可以做到自定义了,详细看上篇文章<vs2017通过模块文件添加自定义注释>,而对于方法的注释,我们也需要完善一下,这里我们用到了“代码片断”插件,VS里有 ...

  10. <ganglia+nagios>rhel6.5

    由于linux下的office和win下有所区别,我只能把linux下的.dot文件打包成pdf,粘贴发送标出来,但有些图片还是没办法发表,要是有朋友感兴趣的话,可加我qq 215687833具体的文 ...