2016年5月23日 星期一

angular-deferred-bootstrap

# angular-deferred-bootstrap
angular-deferred-bootstrap是用來初始化angular應用程式的套件

# 安裝
```shell
bower install --save angular-deferred-bootstrap
```

# 用法
```javascript
deferredBootstrapper.bootstrap({
  element: document.body,
  module: 'MyApp',
  resolve: {
    APP_CONFIG: ['$http', function ($http) {
      return $http.get('/api/demo-config');
    }]
  }
});
```

# 載入狀態css類別

* deferred-bootstrap-loading while the data is loading
* deferred-bootstrap-error if an error occurs in a resolve function and the app can not be bootstrapped

```css
#loading {
    display: none;
}
.deferred-bootstrap-loading #loading {
    display: block !important;
}

#error {
    display: none;
}

.deferred-bootstrap-error #error {
    display: block !important;
}

.loading-message{
    text-align:center;
    font-size:16pt;
}
```

# 載入狀態html
```html

<div id="loading" class="side-body padding-top">
    <div class="progress progress-striped active">
        <div class="progress-bar" style="width: 100%;"></div>
    </div>
    <p class="loading-message">Loading, please wait...</p>
</div>

<div id="error" class="side-body padding-top">
    <div class="progress">
        <div class="progress-bar" style="width: 100%;"></div>
    </div>
    <p class="loading-message">Loading fail, please try again...</p>
</div>
```

angular-cron-jobs

# angular-cron-jobs
angular-cron-jobs是用來轉換crontab語法的介面

## 安裝
```shell
bower install angular-cron-jobs
```

## 載入模組
```javascript
angular.module('myApp', ['angular-cron-jobs']);
```

## 用法
* output:輸出值
* config:設定值
* init:初始值
```html
<cron-selection output="myOutput" config="myConfig" init="serverData"></cron-selection>
```

## 設定值
```javascript
$scope.myConfig = {
    options: {
        allowWeek : false,
        allowMonth : false,
        allowYear : false
    }
}
```

C# 排程套件: Quartz

# Quartz 套件

## 簡介
Quartz是個排程套件

## 安裝
```shell
$ install-package Quartz
```

## 建立Job
```csharp
namespace ConsoleApplication1
{
    using System;
    using Quartz;

    [DisallowConcurrentExecution]
    internal class MyJob : IJob
    {
        public void Execute(IJobExecutionContext context)
        {
            Console.WriteLine("do job");
        }
    }
}
```
## 建立排程
```csharp
namespace ConsoleApplication1
{
    using Quartz;
    using Quartz.Impl;

    internal class Program
    {
        private static void Main(string[] args)
        {
            // 建立排程器
            var schedulerFactory = new StdSchedulerFactory();
            var schedular = schedulerFactory.GetScheduler();

            // 建立Job
            IJobDetail job = JobBuilder.Create<MyJob>()
                .WithIdentity("MyJob")
                .Build();

            // 建立Trigger
            ITrigger trigger = TriggerBuilder.Create()
                .WithCronSchedule("0 0/1 * * * ?")
                .WithIdentity("MyJobTrigger")
                .Build();

            // Job配對Trigger
            schedular.ScheduleJob(job, trigger);

            // 啟動排程器
            schedular.Start();
        }
    }
}
```

## 注意事項
* 排程是固定周期觸發,和Job的執行時間無關
* 每次觸發都會重新建立一個全新的Job物件
* 在Job上加入DisallowConcurrentExecution來限制每次只能執行一個Job

2016年5月18日 星期三

dbup - 資料庫更新工具

dbup是一個用來更新資料庫的工庫,只能往前更新,不能往後回復更新
dbup-consolescripts是用來新增一個年月日時分秒_檔名.sql的套件

新增一個Console專案


## 透過NuGet新增dbup和db-consolescripts套件
```shell
$ install-package dbup
$ install-package dbup-consolescripts
```


# 加入System.Configuration參考


## 新增連線字串
```xml
<?xml version="1.0" encoding="utf-8" ?>
<configuration>

    <connectionStrings>
        <add name="DBConn" providerName="System.Data.SqlClient"
             connectionString="data source=(localdb)\ATCity;initial catalog=RankingSystem;trusted_connection=true;"/>
    </connectionStrings>
   
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>
```

## 修改Program.cs
```cs
namespace SGT.ATCity.RankingSystem.Database
{
    using System;
    using System.Configuration;
    using System.Reflection;
    using DbUp;

    public class Program
    {
        private static int Main(string[] args)
        {
            var connectionString = ConfigurationManager.ConnectionStrings["DBConn"].ConnectionString;
            var upgrader =
                DeployChanges.To
                    .SqlDatabase(connectionString)
                    .WithScriptsEmbeddedInAssembly(Assembly.GetExecutingAssembly())
                    .LogToConsole()
                    .Build();

            var result = upgrader.PerformUpgrade();

            if (!result.Successful)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine(result.Error);
                Console.ResetColor();
                return -1;
            }

            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("Success!");
            Console.ResetColor();
            return 0;
        }
    }
}
```
## 新增SQL檔案
* 透過套件管理器主控台執行New-Migration 名稱, 即可新增一個年月日時分秒_名稱的sql檔案
* 檔案的順序很重要, 會影響呼叫的執行順序
* 編輯要更新資料庫的SQL語法



# 按下F5執行資料庫更新


# 資料庫更新結果
* 新增一個SchemaVersions資料表來記錄更新的記錄
* 相同檔名只會執行一次


2016年5月8日 星期日

透過Application Request Route來做SSL offloading

# Application Request Route
越來越多站台要開始使用SSL了, 記錄一下使用Application Request Route來做SSL offloading的用法

## 首先透過Web Platform Installer來安裝ARR


## 搜尋Application Request Routing, 找到後點安裝就行了


## 重新打開IIS會看到新增了Server Farms和ARR和URL Rewrite這幾個功能


## 先建立一個預設的站台來繫結https通訊協定


## 只有預設站台是HTTPS, 其他站台都是HTTP


## 建立一組Server Farms


## 建立一條路由規則來強制站台只能使用https通訊協定


## 建立第二條路由規則來處理SSL offloading路由到原來只繫結http的站台


## http就會自動轉向https囉