2016-11-10 72 views
2

我正在寻找一种动态生成web apis并在运行时添加它们的方法(在自托管服务器初始化后)。如何在自托管的owin服务器中动态创建Web API(REST apis)?

基本上想法是: 1.创建服务静态/已经定义的控制器(网络API)的一个selfhost owin服务器 - >这部分是确定

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

  • 现在现有的控制器可能需要更新。我想重新生成一个现有的控制器,并更新服务器以使用新的定义(可能参数改变,apis的名称改变等) 任何方式来做到这一点?我们可以在不停止所有控制器的情况下回收控制器吗? 如果以某种方式支持此功能,请务必在一段时间内无法使用该服务(直到更新完成)。

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

  • 任何想法?

    在此先感谢

    +0

    找到了解决方案。如果有人正在寻找这个,我需要覆盖DefaultHttpControllerSelector。 下面是关于这个问题的一个非常漂亮的文章:[链接](http://www.strathweb.com/2013/08/customizing-controller-discovery-in-asp-net-web-api/) 所以基本上对我上面提到的用例,我需要创建一个新的AppDomain,在其中启动我的服务,并在运行时动态加载我的程序集。 我终于需要覆盖DefaultHttpControllerSelector来捕获请求。 当请求到达时,它会控制我要使用的控制器。 – Nick

    +0

    在那里我可以通过加载一个新程序集动态地更新控制器等。 要注意的主要问题是,这是针对每个请求执行的,因此它可能会轻松影响性能和内存。 所以我会实现我自己的控制器缓存。 – Nick

    回答

    0

    找到了解决方案。如果有人正在寻找这个,我需要覆盖DefaultHttpControllerSelector。 下面是关于这个问题的一个非常漂亮的文章:link 所以基本上我的用例上面提到的,我需要创建一个新的AppDomain,在它开始我的服务,并在运行时动态地加载我的程序集。 我终于需要覆盖DefaultHttpControllerSelector来捕获请求。 当请求到达时,它会控制我要使用的控制器。在那里,我可以通过加载一个新程序集来动态更新控制器等。 要注意的主要问题是,这是针对每个请求执行的,因此它可能会轻松影响性能和内存。 所以我会实现我自己的控制器缓存。

    相关问题