使用Glue4Net部署.NET應用

smark發表於2014-01-17

        Glue4Net是一款.NET平臺下的應用部署管理容器,可以配置N個不同目錄下的.NET應用並載入到不同的應用域中,並提供自動識別應用檔案的變更來重新載入應用。通過Glue4Net應用載入容器可以大大節省.NET應用的部署和更新維護工作。

容器結構

支援功能

  • 自動載入目錄的.NET程式.
  • 支援載入多個.NET程式應用
  • 自動載入目錄下的程式碼檔案並新增到應用域中.
  • 提供自成定義模組定義,載入應用的時候執行.
  • 自定義監控檔案變更,變更重新載入相應的服務.

服務安裝使用

容器提供命令列和windows服務模式,可以通過install.bat註冊到windwos服務中執行,容器可以通過以下連線下載

http://www.ikende.com/files/file/Glue4net.rar

託管應用

應用可以是編寫好的DLL或直接相應的程式碼檔案(.cs或.vb)可以存放到任意容器可以訪問的目錄下.通過編輯domains.config檔案把應用新增到容器中(修改檔案後並不需要重啟Glue4Net,容器會自動載入).

    <domains>
       <add name="test"
           compiler="true"
           path="test"
           updateWatch="true"
           watchFilter="*.cs|*.config"/>
    </domains>

只需要在domains配置節新增相關應用的資訊.

  • name
    應用名稱,在容器中是唯一
  • path
    應用所在的目錄,如果不是全路徑的情況則會從當前容器目錄下查詢相應的子目錄
  • compiler
    是否開啟編譯原始碼功能
  • updateWatch
    是否開啟檔案更新監控,如果發現檔案變更則重啟應用
  • watchFilter
    監控的檔案型別

新增執行模組

容器只會根據配置資訊把應用載入到相應的域中,是不會執行任何相關程式碼.如果需要容器載入應用後執行某些功能,則在編寫應用的時候需要有類實現IAppModule介面.容器會遍歷所有這些介面的實現類例項化並執行.

    public interface IAppModule
    {
        string Name
        {
            get;
        }
        IEventLog Log
        {
            get;
            set;
        }
        void Load();
        void UnLoad();
    }

應用配置資訊

在編寫應用的時候很多資訊都依賴於配置檔案,那當容器載入應用後,應用相應的配置檔案是如何處理呢?只需要把配置資訊存放到應用目錄下的app.config即可.

如新增一個AppSetting

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="username" value="bbq"/>
  </appSettings>
</configuration>

程式碼裡直接通過ConfigurationSettings訪問

using System;    
public class TestModule : Glue4Net.IAppModule
    {
        public string Name
        {
            get {return "TEST"; }
        }

        public Glue4Net.IEventLog Log
        {
            get;
            set;
        }

        public void Load()
        {
            string name = System.Configuration.ConfigurationSettings.AppSettings["username"];
            Log.Info("Test Module Load !");
            Log.Info("UserName:{0}", name);
           
        }

        public void UnLoad()
        {
            Log.Info("Test Module UnLoad!");
        }

Glue4Net核心庫:https://github.com/IKende/IKendeLib/tree/master/Glue4Net

 

 

相關文章