【问题标题】:Why would I choose a Windows Service over a Web API service? [closed]为什么我会选择 Windows 服务而不是 Web API 服务? [关闭]
【发布时间】:2016-08-22 03:22:20
【问题描述】:

对我来说,Windows 服务不方便且繁琐,足以质疑它们在所有不是“观察此文件夹以进行更改,对此更改做出反应”的应用程序中的有效性。

我知道这种过度简化是无知的,为什么要选择 Windows 服务而不是 Web API。

【问题讨论】:

  • 内部服务器管理、自动化、事件跟踪/链接...并非所有内容都是基于 Web 的...为什么要调用 Web API 来轮询/响应 Windows 事件日志?或者任何其他数量的服务用于的内部操作?

标签: c# web-services asp.net-web-api microservices


【解决方案1】:

每次您有一些未被 HTTP 请求激活的东西?

要获得提示,请从WIN+R 运行services.msc(运行程序)。浏览这些服务并尝试查看是否所有都可以托管在 IIS 中。

如果不是:嗯,这就是你的答案。

我相信我们可以通过集中监控服务以及 IIS“永不宕机”模块解决重启问题。我选择在自动化部署时将该服务保留为 Windows 服务,但是我并不完全相信安装 -> 附加调试器 -> 进行更改 -> 启动/停止 -> 附加调试器 -> 带来的不便值得当调试器因服务锁定文件等而失败时连枷

恕我直言,当您拥有 Windows 中已经内置的东西(监控 = Windows 事件日志)时,依赖监控服务和始终在线模块会更加脆弱。

至于调试windows服务,在Program.cs中稍作修改即可轻松调试。我在这里写过:http://blog.gauffin.org/2011/09/05/an-easier-way-to-debug-windows-services/

【讨论】:

  • 好的,现在我们正在做饭。假设我有一个在 Windows 服务中运行的自托管 Web API。如果他还要订阅一个消息队列,让他只是一个网络服务是不是一个糟糕的主意?
  • 您是否 100% 确定您可以保持应用程序池和 IIS 运行?重启时会发生什么? IIS 通常仅在第一个请求到达时启动应用程序。然后在空闲时将其取下。这意味着除此之外不会读取您的消息队列。使用 Windows 服务,您可以确定它会随 Windows 一起启动,并在 wndows 关闭时正常关闭。
  • 我相信我们可以通过集中监控服务以及 IIS“永不宕机”模块解决重启问题。我选择在自动化部署时将该服务保留为 Windows 服务,但是我并不完全相信安装 -> 附加调试器 -> 进行更改 -> 启动/停止 -> 附加调试器 -> 带来的不便值得当调试器因服务锁定文件等而失败时连枷。
  • 您好,感谢您的宝贵时间
  • 非常同意...您实际上是在尝试在服务之上构建服务,目的是为了您在服务之上构建的服务...并希望它会是稳定,便于调试。最好通过服务更接近金属(或至少操作系统),IMO(关于调试的好博客文章,顺便说一句)
猜你喜欢
  • 2018-06-06
  • 1970-01-01
  • 2013-03-23
  • 1970-01-01
  • 1970-01-01
  • 2010-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多