部署dotnet Core Web API

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

项目预览

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

运行 & 解决

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

[root@gumis02 API]# dotnet Beyondbit.One.BUA.API.dll
Error:An assembly specified in the application dependencies manifest (Beyondbit.One.BUA.API.deps.json) was not found:package: 'Microsoft.ApplicationInsights.AspNetCore', version: '2.1.1'path: 'lib/netstandard1.6/Microsoft.ApplicationInsights.AspNetCore.dll'This assembly was expected to be in the local runtime store as the application was published using the following target manifest files: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
[root@gumis02 API]# 

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

增加如下一行到 csjproj文件中即可:false
最后csjproj文件看上去像这个样子:

  <PropertyGroup><TargetFramework>netcoreapp2.0</TargetFramework><PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest></PropertyGroup>

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

[root@gumis02 API]# dotnet Beyondbit.One.BUA.API.dll
warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]No XML encryptor configured. Key {0372b52e-5124-4655-871b-906a0467a642} may be persisted to storage in unencrypted form.
Application startup exception: System.InvalidOperationException: No service for type 'Microsoft.AspNetCore.Http.IHttpContextAccessor' has been registered.at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)at Beyondbit.Framework.StaticHttpContextExtensions.UseStaticHttpContext(IApplicationBuilder app, HttpContextOptions options)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
--- End of stack trace from previous location where exception was thrown ---at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at Microsoft.AspNetCore.Hosting.ConventionBasedStartup.Configure(IApplicationBuilder app)at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
crit: Microsoft.AspNetCore.Hosting.Internal.WebHost[6]Application startup exception
System.InvalidOperationException: No service for type 'Microsoft.AspNetCore.Http.IHttpContextAccessor' has been registered.at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)at Beyondbit.Framework.StaticHttpContextExtensions.UseStaticHttpContext(IApplicationBuilder app, HttpContextOptions options)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
--- End of stack trace from previous location where exception was thrown ---at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at Microsoft.AspNetCore.Hosting.ConventionBasedStartup.Configure(IApplicationBuilder app)at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()Unhandled Exception: System.InvalidOperationException: No service for type 'Microsoft.AspNetCore.Http.IHttpContextAccessor' has been registered.at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)at Beyondbit.Framework.StaticHttpContextExtensions.UseStaticHttpContext(IApplicationBuilder app, HttpContextOptions options)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
--- End of stack trace from previous location where exception was thrown ---at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at Microsoft.AspNetCore.Hosting.ConventionBasedStartup.Configure(IApplicationBuilder app)at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()at Microsoft.AspNetCore.Hosting.WebHostBuilder.Build()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
\u5df2\u653e\u5f03 (core dumped)
[root@gumis02 API]#

错误提示确实依赖:
在Starpup.cs 加入一段话:

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); 

如:

public void ConfigureServices(IServiceCollection services){services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();services.AddMvc(options =>{options.Filters.Add<IdentityActionFilter>();options.Filters.Add<JsonpActionFilter>();});services.AddDistributedMemoryCache();services.AddSession();services.AddCors();}

最后运行成功了:

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

增加多域名,多IP支持

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

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

可以看到服务器5000端口是针对 127.0.0.1和localhost才可以访问到,这两个都是在服务器内部使用的。
按照.net core 启动域名及端口配置 文章中 linux环境一节说明的配置,将代码改造以下,支持在服务器外访问。

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

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

namespace Beyondbit.One.BUA.API
{public class Program{public static void Main(string[] args){BuildWebHost(args).Run();}public static IWebHost BuildWebHost(string[] args){var config = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("hosting.json", optional: true).Build();var host = new WebHostBuilder().UseKestrel().UseConfiguration(config).UseContentRoot(Directory.GetCurrentDirectory()).UseIISIntegration().UseStartup<Startup>().Build();return host;}}
}

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

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

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

转载于:https://www.cnblogs.com/xakoy/p/9066724.html

国产中标麒麟Linux部署dotnet core 环境并运行项目 (三) 部署运行WEB API项目相关推荐

  1. Linux系统上部署dotnet core

    Linux系统上部署dotnet core 主要步骤如下: 安装linux Linux下安装dotnet core环境 Linux下部署dotnet core系统 主要步骤如下: 因我公司需要,做一个 ...

  2. 国产化探索之路---中标麒麟 Linux系统下,FTP服务器部署

    中标麒麟 Linux系统下,FTP服务器部署 1.安装FTP软件包 yum install vsftpd -y 2.创建ftp用户密码 useradd ftpuserecho "ftpuse ...

  3. 边缘化搭建 DotNet Core 2.1 自动化发布和部署(下)

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

  4. 0网卡开启_中标麒麟Linux v7系统下设置双网卡bond或team绑定详细过程

    中标麒麟Linux v7系统下设置双网卡bond或team绑定详细过程.所谓bond,就是把多个物理网卡绑定成一个逻辑网卡,使用同一个IP工作,在增加带宽的同时也可以提高冗余性,一般使用较多的就是来提 ...

  5. 中标麒麟linux操作系统下的英伟达(NV/nvidia)显卡驱动安装

    中标麒麟linux是我国目前市场份额最大的国产linux操作系统,从细节可以看出改来自于Fedora Linux 系统,所以几乎可以看做Fedora Linux的汉化版,那么很简单,能在Fedora ...

  6. k8s pod部署到不同node_部署Dotnet Core应用到Kubernetes(一) - 老王Plus

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

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

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

  8. linux软件包管理 pdf,中标麒麟Linux系统软件包管理介绍(22页)-原创力文档

    中标麒麟Linux服务器操作系统培训系列 中标麒麟Linux系统软件包管理介绍 技术创新,变革未来 本章目标 •了解中标麒麟Linux服务器操作系统中应用程序的 组成: •了解中标麒麟Linux服务器 ...

  9. 中标麒麟系统u盘安装_U盘安装中标麒麟Linux桌面版的方法

    U盘安装中标麒麟Linux桌面版的方法 发布时间:2014-11-16 14:21:35来源:红联作者:qajcsyq (无法插图,希望大家仔细理解) U盘安装中标麒麟桌面版分以下几步. 第一步:下载 ...

最新文章

  1. 竞态条件的赋值_《Java并发编程实战》读书笔记一:基础知识
  2. js 连接mysql_关于Node.js 链接mysql超时处理(默认8小时)
  3. dhcp配置(个人)
  4. python编程从入门到精通pdf-Python编程从入门到精通.pdf
  5. 转载:Linux下查看/修改系统时区、时间
  6. ES6 for...of循环
  7. “开启IT管理新时代”惠普软件客户论坛圆满闭幕
  8. html5文本超过指定行数隐藏显示省略号
  9. APP后端数据接口注意事项
  10. 惠普HP ENVY 5055 打印机驱动
  11. C# 多个点拟合圆并给出圆心坐标
  12. Doris ODBC外表使用
  13. 如何将多sheet Excel 导入到超级表格中
  14. 华为防火墙简介及其工作原理
  15. 多无线路由器AP使用同一个SSID号无缝连接漫游
  16. (转)webpack简介
  17. vue中脚手架设置自动打开浏览器打开后地址为http://0.0.0.0:8080/
  18. 题解 SP2916 【GSS5 - Can you answer these queries V】
  19. 文献 | 从认知和护理角度谈双相情感障碍
  20. 仿今日头条后台管理系统(三)

热门文章

  1. 【调试】Linux下超强内存检测工具Valgrind
  2. 大数据--循序渐进的大数据(2)
  3. mac 完全卸载vscode
  4. javascript --- [FormData的使用] 表单元素转换成表单 对象二进制文件上传
  5. 怎么建立微信生态用户增长模型?
  6. 《大数据原理:复杂信息的准备、共享和分析》一一2.5 在标识符中嵌入信息:不推荐...
  7. 递归函数(九):最小不动点定理
  8. Max Sum 杭电 1003
  9. 札记__ADT:URL,Lua:strlen方法
  10. about hamout cloudra