日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

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

發布時間:2023/12/10 linux 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 国产中标麒麟Linux部署dotnet core 环境并运行项目 (三) 部署运行WEB API项目 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

部署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環境一節說明的配置,將代碼改造以下,支持在服務器外訪問。

  • 首先在解決方案中添加一個文件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项目的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。