基於Roslyn的遠程任務平臺

前一段時間,有一個天真的想法。我想將一個Action或者Func傳輸到遠程機器上執行。有不少問題。委託執行的上下文怎麼複製。開始是想將委託所在的DLL和引用的DLL一塊兒傳輸到遠程機器上。這樣一來,上下文環境不就有了嗎。固然在GAC裏的DLL就不用傳輸了,傳輸對象只限於自定義的DLL。但是這樣作十分的麻煩也沒有必要。後來在微軟成立基金會的那天,偶然看到了Roslyn。它能夠將一段字符串解析,編譯。利用Rolyn的擴展,甚至能夠直接執行一段字符串代碼。太神奇了。因而就有了下面這個項目的想法。首先,先給各位看張圖。看看個人大概思路。git

 

 

  1. 首先,會發送一個消息對象到服務端監聽程序。這個對象裏包含有任務ID、要被動態編譯的字符串代碼、及引用的程序集(GAC中的再也不其中)、路由信息。目前全部任務都是統一的一種處理方式,將字符串代碼編譯生成DLL。保存到本地文件系統中,而後通過一些列管道中自定義模塊的處理。將任務信息最終分發到指定的進程中去處理。之後可能會添加其餘的任務處理方式。比方說,不持久化生成DLL。直接將字符串代碼通過Roslyn和其擴展動態執行。也能夠不通過路由平臺將任務分發到指定的進程中。暫時沒有想到其餘的。
  2. 其中應用到的設計理念有相似於Asp.Net路由機制、管道設計、對象池(每個請求就會new一個RemoteTaskAppliction,爲了減輕壓力,因此就有了對象池的設計。若是對象池中的對象超過了對象池最大容量,那麼該請求就會排隊等待有對象被釋放到池中再進行處理。)、對於請求的隊列控制(和對象池搭配使用,只有當有空閒空對象能夠進行處理的時候,纔會將請求出隊)。相似於IHttpModule的實現(在整個RemoteTaskApplication的生命週期內,定義了一系列的事件可供自定義的Module註冊,達到對請求的控制。目前可能就有日誌模塊、安全模塊)

 

這個項目還沒徹底寫完。最後引用Github的一句話。Build software better, together。該項目,我已經放在github上。地址是 https://github.com/freestyleSago/RemoteTaskPlatformgithub

這個項目呢,對我來講,它的鍛鍊目的大於它的實際價值。因此也但願各位大神多多指點。蔣金楠(Artech)老師真是太牛了。多看他的文章,相信你們也會有收穫。目前Roslyn和C#6.0的資料都太少,不過我以爲,有了Roslyn就能夠將C#變成腳本語言了。解析執行。也許意義不大,性能不好。可是很酷啊。也算是圓了個人一個夢啊,給你一段字符串,你就給我執行。安全

相關文章
相關標籤/搜索