我正在寻找一种动态生成 Web api 并在运行时添加它们的方法(在自托管服务器初始化之后)。
基本上这个想法是:
1. 创建一个 selfhost owin 服务器,为静态/已定义的控制器(Web api)提供服务 -> 这部分没问题
稍后,我想动态生成一个新的控制器并将其以某种方式添加到服务器,以便客户端可以向它发送请求。 -> 有办法做到这一点吗?我知道我可以动态构建一个控制器并将其添加到服务器,然后再将其初始化以服务现有的 Web api(使用 CustomAssemblyResolver)。
现在现有的控制器可能需要更新。我想重新生成现有控制器并更新服务器以使用新定义(可能是参数更改、api 名称更改等)
有办法做到这一点吗?我们可以在不停止所有控制器的情况下回收一个控制器吗?
如果可以以某种方式支持此功能,是否意味着该服务将在一段时间内不可用(直到更新完成)。
理想情况下,它会像 IIS 中托管的 Web 服务一样工作。如果 Web 服务定义在 2 个请求之间发生更改。第一个请求转到旧定义,第二个请求透明地定向到新定义。服务不会中断。
有任何想法吗?
提前致谢
找到了解决方案。如果其他人正在寻找这个,我需要覆盖 DefaultHttpControllerSelector。
这是一篇关于这个主题的非常好的文章:link http://www.strathweb.com/2013/08/customizing-controller-discovery-in-asp-net-web-api/因此,基本上对于上面提到的用例,我需要创建一个新的 AppDomain,在其中启动我的服务,并在运行时动态加载我的程序集。
我最终需要覆盖 DefaultHttpControllerSelector 来捕获请求。
当请求到达时,它就可以控制我要使用的控制器。在那里我可以通过加载新程序集等来动态更新控制器。
主要要注意的是,这是针对每个请求执行的,因此它很容易影响性能和内存。
所以我将实现我自己的控制器缓存。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)