移植Windows自宿主WCF服務到Linux/Mono2.8
Windows服務是這些後臺程式、後臺服務的正規名詞。Windows服務的執行可以在沒有使用者干預的情況下,在後臺執行,沒有任何介面。通過Windows服務管理器進行管理。服務管理器也只能做些簡單的操作:開始,暫停,繼續,停止。Windows服務的特點:在後臺執行,沒有使用者互動,可以隨Windows啟動而啟動。
後臺服務在Unix/Linux上叫做Daemon,在Linux系統中就包含許多的Daemon。判斷Daemon最簡單的方法就是從名稱上看。Linux下自動啟動的服務都在/etc/rc.d/init.d/目錄下,比如說mysql。如果不想讓一個服務自動執行,把/etc/rc.d/init.d/目錄下的這個服務指令碼移除掉就可以(一定要移除嗎,不可以使用類似Window下的手動啟動?)。
可以操作的狀態:
- start 啟動服務,等價於服務腳本里的start命令
- stop 停止服務,等價於副外長指令碼stop命令
- restart 關閉服務,然後重新啟動,等價於指令碼restart命令
- reload 使服不重新啟動而重讀配置檔案,等價與服務指令碼的reload命令
- status 提供服務的當前狀態,等價於服務指令碼的status命令
- condrestart 如果服務鎖定,則這個來關閉服務,然後再次啟動,等價於condrestart命令
Mono 下的Windows服務叫做mono-service,mono-service
-d:DIRECTORY
Use this option to specify the working directory for the
service. The default is the current directory.
-l:LOCKFILE
Specifies the file to use for locking, the default is a filename
constructed in /tmp based on the name of the program that hosts
the service.
-m:MESSAGE
Name to show in the syslog.
-n:NAME
Use this to specify the service to be launched (if the program
contains more than one service). The default is to run the
first defined service.
--debug
Use this option to prevent mono-service from redirecting stdin
and stdout and prevent the program to be sent to the background.
Equivalent to --no-daemon
--no-daemon
Use this option to prevent mono-service from redirecting stdin
and stdout and prevent the program to be sent to the background.
Equivalent to --debug.
Mono 2.8對wcf的支援也比較好了,這裡的例子就是將Windows下self host的一個wcf服務移植到Linux上。
1、在Window下編寫一個WCF 服務端作為Window服務。我們服務的程式碼結構如下
要將.NET程式移植到Mono,我們一般會使用net 應用遷移到Mono 工具 (Moma)檢查下相容性。下面這個專案的檢查結果,看看是不是Mono2.8完美支援WCF。
DynIPServiceWS是WCF的windows服務的宿主,我們把程式碼放到Linux下使用MonoDevelop編譯.放到/home/geffzhang/Projects/DynIPServiceWS目錄下,切換到這個目錄,執行命令
mono-service DynIPServiceWS.exe
執行DynIPClient.exe,返回執行結果說明服務已經在執行,如果客戶端出現目標機器積極拒絕說明服務沒有啟動。
mono DynIPClient.exe。