3

我正在寻找一种动态生成 W​​eb api 并在运行时添加它们的方法(在初始化自托管服务器之后)。

基本上这个想法是: 1. 创建一个 selfhost owin 服务器,服务于静态/已经定义的控制器(web apis)-> 这部分没问题

  1. 稍后,我想动态生成一个新控制器并以某种方式将其添加到服务器,以便客户端可以向它发送请求。-> 有没有办法做到这一点?我知道我可以动态构建一个控制器并将其添加到服务器之前,它被初始化为服务现有的 Web api(使用 CustomAssemblyResolver)。

  2. 现在可能需要更新现有的控制器。我想重新生成一个现有控制器并更新服务器以使用新定义(可能是参数更改、api 名称更改等)有什么办法吗?我们可以在不停止所有控制器的情况下回收控制器吗?如果以某种方式可以支持此功能,是否意味着该服务将在一段时间内不可用(直到更新完成)。

  3. 理想情况下,它会像 IIS 中托管的 Web 服务一样工作。如果 Web 服务定义在 2 个请求之间发生变化。第一个请求转到旧定义,第二个请求透明地指向新定义。服务没有中断。

有任何想法吗?

提前致谢

4

1 回答 1

2

找到了解决方案。如果其他人正在寻找这个,我需要覆盖 DefaultHttpControllerSelector。这是一篇关于这个主题的非常好的文章:链接 所以基本上对于我上面提到的用例,我需要创建一个新的 AppDomain,在其中启动我的服务,并在运行时动态加载我的程序集。我最后需要覆盖 DefaultHttpControllerSelector 来捕获请求。当请求到达时,它可以控制我要使用的控制器。在那里,我可以通过加载新程序集等来动态更新控制器。要注意的主要是每个请求都会执行此操作,因此它很容易影响性能和内存。所以我将实现我自己的控制器缓存。

于 2016-11-10T17:11:44.080 回答