2013-02-27 47 views
1

RPC ASP.NET API我設計的API,使遠程客戶端對遠程服務器執行PowerShell腳本。設計模式:針對後端應用

爲了有效地執行這些命令,應用程序需要以產生用於遠程客戶端的唯一運行空間(因此它可與合適的宿主初始化運行空間和命令該客戶端中設置)。每當客戶端發出請求時,API都需要確保請求在正確的運行空間內執行。

的(過度簡化的)鑑於流動的可能是這樣的:

  1. 客戶端連接到網絡API,用於後端應用程序發送憑證
  2. 的Web API,可以通過到後端應用程序將這些憑據傳遞,使用它們來對一個鏈接session-runspace
  3. ID
  4. 網頁API或者創建唯一地爲該客戶端配置
  5. 網頁API和應用程式運行空間「同意」通知session-runspace ID的客戶端或其保持在存儲器
  6. 客戶提出要求:例如"GET http://myapiserver/api/backup-status/"
  7. Web API將請求傳遞到後端應用程序函數
  8. 後端應用程序返回結果:例如, 「JSON {這是備份用戶/客戶端x的當前狀態}」
  9. 網頁API通過向遠程客戶端通過這些結果
  10. 要麼超時或註銷請求端「會話」和運行空間設置

(在現實中,PowerShell的應用程序可能只是在Web API中的自定義控制器/模型,或者它可能是一個IIS管理單元或相似 - 我願意在這裏設計建議...)。

我擔心的是,以創造獨特的運行空間爲每個遠程客戶端,我需要給該客戶端的獨特的「會話」的ID,這樣的API可以通過對應用程序正確傳遞請求。這感覺就像我打破了無國籍的規則。

事實上,API仍然是無狀態的,只是後端應用程序不是,但它確實需要爲每個客戶端創建一個會話(RunSpace),然後在超時/結束會話請求後處理RunSpace 。

質詢

  1. 我應該攻入在ASP.NET MVC的驗證機制來加速旋轉運行空間?
  2. 我應該認輸,只是砍了一個會話變量?
  3. 是否有更好的SOA,我應該考慮什麼? (網絡API感覺非常整潔的這雖然 - 特別是如果我想有網絡,移動和什麼具備的,你的客戶)

回答

1

這感覺就像我打破了無狀態的規則。

您的應用程序是有狀態的 - 沒有辦法解決它。您必須爲每個客戶端維護一個進程,並且該進程必須在一個盒子上運行,並且客戶端始終連接到相同的盒子。所以如果你有一臺服務器,沒問題。如果你有多個,你必須使用粘性會話,所以客戶端總是回到同一個服務器(負載平衡器可以爲你做到這一點)。

我應該入侵ASP.NET MVC的認證機制到 spin-up RunSpace?

如果您需要驗證。

我是否應該承認失敗並且只是破解會話變量?

沒有變量,只是使用純內存會話。如果超過1臺服務器,請按照上面的說明使用粘性會話。

有沒有更好的SOA我應該考慮? (網絡API感覺很整齊 整潔的這雖然 - 特別是如果我想有網絡,移動 什麼具備的,你的客戶)

SOA不會接觸到這一點。你有一個單一的服務。

+0

謝謝 - 我很擔心。 我需要身份驗證才能爲客戶端創建唯一會話(他們可以訪問特定的服務器/命令集)。我想知道在哪裏最合理地啓動RunSpace,身份驗證處理程序或其他地方。 我還想知道web api是否是這項工作的最佳工具,或者是不同的服務設計模式更有意義。 – 2013-02-27 01:13:30