上下文:我的公司一直在开发一个由IIS托管的WebAPI应用程序,并且单个静态内容文件的请求延迟大约为60毫秒。我们使用WebAPI Self主机调查了相同应用程序的基准测试,同一内容文件的延迟时间约为15毫秒,这真的让我们感到震惊。
从部署过程开始,我们喜欢IIS,因为它通过将DLL直接复制到我们的Web服务器来为我们提供极大的灵活性来进行热部署,这不需要我们进行任何类型的停止。
问题:使用自托管应用程序进行类似的热部署(只是复制dll)是否可行?
答案 0 :(得分:1)
不,当自主机正在执行时,DLL将被锁定,因此您必须先停止自主机。您可以执行其他技巧,例如部署到另一个文件夹,然后重新路由请求等,但它与IIS部署不同。
答案 1 :(得分:0)
自托管允许您执行一些巧妙的事情,例如在主服务关闭时将响应的同一地址上运行的辅助服务。例如它可以返回带有retry-after标头的503。停止并启动服务以启用复制文件只需几秒钟。
另一方面,如果IIS花费的时间超过自托管以提供静态内容,那么您做错了。 IIS可以使用http.sys的内核模式功能来传递静态内容。其中一个基于Owin的主机已为自主主机启用此功能,但默认的自主主机不允许这样做。根据我的经验,对于小文件,IIS绝对应该快于60ms。