【问题标题】:hot-deployments with Self Host Web Api Services使用自托管 Web Api 服务进行热部署
【发布时间】:2013-07-20 00:19:54
【问题描述】:
上下文:我的公司一直在开发一个由 IIS 托管的 WebAPI 应用程序,单个静态内容文件的请求延迟约为 60 毫秒。我们调查了使用 WebAPI Self 主机对同一应用程序进行基准测试,同一内容文件的延迟约为 15 毫秒,这真的让我们大吃一惊。
从部署过程来看,我们喜欢 IIS,因为它通过将 DLL 直接复制到我们的 Web 服务器来为我们进行热部署提供了极大的灵活性,这不需要我们进行任何形式的排空。
问题:使用自托管应用程序进行类似的热部署(只是复制 dll)是否可行?
【问题讨论】:
标签:
c#
iis-7
asp.net-web-api
【解决方案1】:
不,当 self-host 正在执行时,DLL 将被锁定,因此您必须先停止 self-host。您可以执行其他技巧,例如部署到另一个文件夹,然后重新路由请求等,但这与 IIS 部署不同。
【解决方案2】:
自主机允许您做一些简洁的事情,例如在同一地址上运行辅助服务,当主服务关闭时会响应。例如它可以返回带有 retry-after 标头的 503。停止和启动服务以启用文件复制只需几秒钟。
另一方面,如果 IIS 提供静态内容的时间比自托管时间长,那么您就做错了。 IIS 可以使用 http.sys 的内核模式函数来传递静态内容。其中一个基于 Owin 的主机已为自主机启用此功能,但默认自主机不允许这样做。根据我的经验,对于小文件,IIS 绝对应该快于 60 毫秒。