2011-02-25 34 views
0

是否可以按需啓動自己託管的WCF服務?按需啓動自己託管的WCF服務

我看到兩個選項來實現:WCF開始尋找之前

  • 插入在自監聽器承載的WCF的Web服務器,並旋轉了一個服務主機時針對特定服務的請求到來時,該終點的存在;或

  • 在進程中集成Web服務,爲請求啓動服務主機,如果它尚未運行並將請求重定向到該服務主機(就像我懷疑IIS那樣)。

我無法使用IIS或WAS,因爲Web服務需要在使用UI業務邏輯的過程中運行。

這是可行的,我怎麼能做到這一點?

編輯:
我不能只啓動該服務主機,因爲有數百個,大部分(約95%)的(幾乎)從來沒有使用過它,但必須是可用的。這是爲了暴露900個實體的業務邏輯層。

+1

爲什麼你不能旋轉服務主機並完成? – RQDQ 2011-02-25 20:31:02

+0

有數百種,其中大多數(大約95%)是(幾乎)從未使用過的,但需要可用。這是爲了暴露900個實體的業務邏輯層。 – 2011-02-25 20:34:41

回答

1

去了以下路線:

  • 創建一個單一的服務主機;

  • 創建一個實現所有服務接口的動態代理;

  • 添加每個動態代理實現接口的服務端點;

  • 從動態代理髮送到正確的實現。

+0

這聽起來很漂亮 - 你有可能在某處發佈這種方法的例子嗎? – RQDQ 2011-02-26 18:37:09

+0

這不是很難:),但是將它發佈到某個地方是個好主意。我沒有博客。你有什麼建議我可以發佈這個? – 2011-02-27 05:42:56

+0

你可以隨時把它放在CodeProject上。 – RQDQ 2011-02-28 17:06:18

1

您可以執行定位器服務設置。基本上總是公開一個返回「實際」服務地址的輕量級服務。每次請求特定服務的地址時,請繼續並旋轉它。

如果你擔心清除它,你可以保持服務的主機和電線的某種不活動超時的清單,讓您可以定期關閉該服務的主機。

有一些設計關注在這裏 - 「呼喚一個服務調用另一個前」的概念大概被認爲在一定程度上是一個壞主意(聽起來像耦合的兩個服務的狀態)。

+0

雖然客戶端不可能緩存結果,但這會走很長的路。如果所有的客戶端在他們提出任何請求之前執行該請求,這將是可靠的唯一方法。我認爲這會造成太高的開銷。 – 2011-02-25 21:51:59