2016-11-10 47 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來捕獲請求。 當請求到達時,它會控制我要使用的控制器。在那裏,我可以通過加載一個新程序集來動態更新控制器等。 要注意的主要問題是,這是針對每個請求執行的,因此它可能會輕鬆影響性能和內存。 所以我會實現我自己的控制器緩存。

    相關問題