如何在自托管owin服务器中动态创建Web API(REST apis)?

时间:2016-11-10 07:39:22

标签: rest web asp.net-web-api owin self-host-webapi

我正在寻找一种动态生成web apis的方法,并在运行时添加它们(在自主服务器初始化之后)。

基本上这个想法是:  1.创建一个服务于静态/已定义控制器的自主服务器owin服务器(web apis) - >这部分还可以

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

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

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

  4. 有什么想法吗?

    提前致谢

1 个答案:

答案 0 :(得分:1)

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