• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ASP.NETCoreWindows部署使用IIS托管服务注册Consul时的坑

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

大家习惯将服务注册写进Startup中的Configure管道配置,用来在服务启动时进行Consul服务注册,如图:

 

然后将服务部署在IIS下,部署好之后,点击启动网站,却发现服务并没有注册进Consul,然后我就查其原因:

 

 

 

 也就是说,使用IIS托管时,不管是进程内外托管,都会有这个问题,第一个请求时,应用才会运行起来,我用Exceptionless做了实测(进程外托管程序是dotnet),验证后无疑。

 

 解决方案:

(1)使用IIS预加载,来自动触发第一个请求达到服务注册的目的(或每次部署完手动浏览或其他请求模拟器来达到启动IIS工作进程的目的)。

  *先打开windows的应用初始化功能,很重要,因为不打开也能配置预加载,只是不会生效,笑哭(WIN10为例)

  1、打开“开启和关闭Windows”功能

  2、点击internet information services
  3、点击“万维网服务”
  4、点击“应用程序开发功能”
  5、勾选“应用程序初始化”

  *IIS的配置(我直接截图)

  1.更改网站对应的应用程序池的启动模式

  

 

  2.网站启用预加载

  

 

  3.配置预加载请求

  

 

  注意:预加载解决了注册问题,但是带来了新问题:网站停止时再次触发了预加载,导致consul中注册了一个不可用的服务。

     解决:先停网站的应用程序池再停网站可避免这个错误注册的问题。

(2)不使用IIS托管需要注册的服务,换成Windowss Service(可以考虑混合部署,IIS部署一些,Windowss Service部署一些),还有控制台或Windows Docker(选用自己合适的)

  asp.net core真是很方便,只需要引入Microsoft.Extensions.Hosting.WindowsServices包(官方文档包引入有误),然后UseWindowsService。发布后使用命令安装成Windows Service就好了

  注意:Directory.GetCurrentDirectory()要换成AppContext.BaseDirectory或IHostEnvironment.ContentRootPath,解决宿主Windows Service获取目录问题

   

哈哈,一个小问题就牵扯出了IIS工作机制和asp.net core的工作机制

文档:

使用 IIS 在 Windows 上托管 ASP.NET Core

在 Windows 服务中托管 ASP.NET Core

Windows 进程激活服务 (WAS)


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
如何在asp.net中如何在线播放视频文件发布时间:2022-07-10
下一篇:
ASP.NET页面防止刷新发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap