發表文章

目前顯示的是 2016的文章

[Docker for Windows] ASP.NET Core 試玩

圖片
個人針對.netcore 執行在docker的一些小功能測試,例如:如何將發行的程式建置成image、連線到內部主機等..。

環境Docker for Windowsimage:aspnetcore (Linux base) Step by Step 1.建立.netcore web application,在Contoller撰寫資料庫連線

Window Containers Hello SQL Express

圖片
最近公司的測試主機安裝成Window Server 2016,剛好可以來玩一下Window Containers功能。

安裝設定 Step by Step 啟用服務 以下指令皆為 Power Shell
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -all Enable-WindowsOptionalFeature -Online -FeatureName containers –all ps : 執行後須重開機

下載Docker$version = (Invoke-WebRequest -UseBasicParsing https://raw.githubusercontent.com/docker/docker/master/VERSION).Content.Trim() Invoke-WebRequest "https://master.dockerproject.org/windows/amd64/docker-$($version).zip" -OutFile "$env:TEMP\docker.zip" -UseBasicParsing
安裝DockerExpand-Archive -Path "$env:TEMP\docker.zip" -DestinationPath $env:ProgramFiles
註冊為Service$env:path +=";c:\program files\Docker" [Environment]::SetEnvironmentVariable("Path",$env:Path+"C:\Program Files\Docker",[EnvironmentVariableTarget]::Machine) dockerd --register-service Start-Service Docker
到此步驟已完成安裝。

SQL Server 2016 Express 版的 Windows 容器 安裝完後,當然是要找個容器來執行看看。
下載Image檔docker pull microsoft/m…

Jenkins 解決Protractor螢幕太小

圖片
在Jeinkins 透過command or PowerShell執行Protractor測試時,預設會在JVM的背景執行,螢幕大小只有1024*768。這導致測試會遇到點不到element的錯誤。之前的解決方法,是Jenkins透過另一程式來執行,但這樣的方式在Jenkins會無法得知測試狀況及結果。

解決方式 參考StackoverFlow的討論後,試了幾個方法...最後測試是可以透過新增slave來達到desktop互動,這樣在測試時,就會即時看到測試畫面,且螢幕大小是以你目前的顯示為主。
1.新增slave

Jenkins-Plugin 部署應用程式到網路目錄

圖片
目前的測試主機上會執行一些Window應用程式,由於是跟Jenkins主機同一台,所以發行應用程式的工作,只要在建置後,執行xcopy即可以完成。

問題
  由於測試主機的工作量增加,所以決定將Jenkins移至另一台主機。而移機事小,但原本的佈署工作就會有些問題需要解決,例如在Jenkins 無法使用xcopy 到網路目錄,會得到錯誤 Invalid drive specification

.netcore TypeScript Setup

設定檔tsconfig.json 預設在Vs2015 加入.ts檔案,就會自動在每次儲存時complier,輸出js檔,若要進階設定,.netCore的專案需在根目錄加入組態檔tsconfig.json。參考如下:
tsconfig.json
{ "compilerOptions": { "noImplicitAny": true, "noEmitOnError": true, "sourceMap": true, "target": "es5", "module": "commonjs" }, "exclude": [ "node_modules", "wwwroot/lib", "bin", "obj" ], "compileOnSave": true } 上方的exclude,會排除目錄內的.ts。若不使用exclude,只想針對特定檔案的話,可以使用files參數,此參數要明確指定檔名,例:
files:[‘./wwwroot/js/app.ts’]

Protractor Chrome v53後的錯誤修正

更新到Chrome 53後,原本可以正常執行測試的的Protractor出現了些bug...無法使用鍵盤的Tab鍵。無法執行測試,錯誤訊息"Error  Runtime.executionContextCreated has invalid 'context'"解決方式在github Issue 找到的解答是將selenium chrome driver 更新到2.24,不過要透過指定版本的方式,才可以更析,個人更新步驟如下:開啟工作管理員,先將殘留chrome.exe停掉,否則無法更新driver重新安裝 Protractor (非必要步驟,只是我因更新driver後,也無法執行測試,所以用重新安裝的方式就可以了)
npm uninstall protractor -g
npm install protractor –g更新driver
webdriver-manager update --standalone true --versions.chrome 2.24參考來源https://github.com/angular/protractor/issues/3530https://github.com/angular/webdriver-manager/issues/93

[Google Analytics] 資料收集與報表設定

圖片
關於Google Analytics的介紹,網路上有很多文章,這裡就不多作介紹,本文為個人最近在Survey時,針對需要的功能及其相關API 的拉拉雜雜記錄。

ps:使用的是新版的Library analytics.js 舊版為ga.js

增強型電子商務
針對ec基本步驟的資料收集,例:
產品檢視 加入購物車 進入結帳 完成購買 1.啟用設定


[Memo] 使用Fiddler 發Request

圖片
測試一個功能是要從臺灣銀行下載匯率檔。從網頁可以直接click後下載檔案。


但若寫程式(WebClient)下載則會得到URL錯誤的html內容


[.NET Core] IIS 設定環境變數

圖片
.NET Core Web專案在部署時,可以依據不同的環境變數切換不同的組態設定,例:appsettings.{env.EnvironmentName}.json。本文介紹針對部署至IIS後,如何在IIS上設定環境變數,來達到各階段的Site區分 例:QAS、Staggin、Production

Step by Step
1.在目標Site上打開Configuration Editor


[.NET Core] Render Razor View to string in .NET Core

圖片
之前在MVC5常用的Function,從Controller Render 某一個Partial View的Html來使用。在MVC6本想說將舊程式copy回來就可以用了,但事實上方法簽章不太一樣,所以需作些調整。

原程式-MVC 5



新程式-MVC 6


差異說明:ICompositeViewEngine,在建構式須先注入。 取得預設的Action改由ActionDesciptor取得 沒有FindPartialView,改成FindView,最後一個參數boolean決定Full View or Partial View 使用非同步Render

[.NET Core] Tip-將專案特定目錄排除

圖片
.NET Core專案預設目錄內所有的檔案都是加入的狀態,這樣的設計很方便,但也造成一些不便之處。例如:在程式動態產生了縮圖,要放在thumbs目錄時,會被加入至專案。



解決方式 使用文字編輯專案檔.xproj,加入DnsInvisibleFolder設定,如下:



回到Visual Studio再重整一下就看不到該目錄了

參考來源http://stackoverflow.com/questions/30175235/how-can-i-hide-files-from-solution-explorer-by-name-in-vs2015

IIS Management–Power Shell

圖片
前一陣子看到某篇介紹CI文章時,在章節的後面,提到使用Power Shell管理IIS(作者還沒寫到實作內容)。等不及作者後續的文章,自己先針對可能會用到的功能實作練習一下。

IIS Command
基本指令:取得Site、備份、還原、更改實體路徑,更多指令請參考



IIS Remote
確定基本指令可以使用後,再來練習如何操作遠方主機。

1.初次使用,若Client端未加入Domain,須作如下設定



後記:在Window 10執行,會出現錯誤訊息如下:解決方法將網路改為私有:Set-NetConnectionProfile -InterfaceAlias 乙太網路 -NetworkCategory Private
參考連結2.透過帳號密碼進入遠方主機


上方指令執行完後,就已進入遠方主機的Session,此時下的任何指令,都是執行在主機上。

3.若不使用進入主機的方式,也可以直接使用Invoke-Command 來執行


參考來源 http://serverfault.com/questions/657918/remote-ps-session-fails-on-non-domain-server/657923#657923?newreg=bc5b77333d334495a1d62b980ea3c0d8
http://stackoverflow.com/questions/10011794/hardcode-password-into-powershells-new-pssession

透過共用存取簽章上傳Azure Blob

圖片
一般來說,在上傳檔案到Azure時,會先將檔案傳到本地的網站上,再由網站將檔案內容傳到Azure上,如下圖,網站扮演著Proxy Service的角色。


圖片來源:azure.microsoft.com

這樣的方式的好處是,安全性高(金鑰只有網站知道),且可以依商務邏輯調整。但相對的在頻寬及處理的須付出相對的成本。

   另一種方式,不透過網站,直接由Client端上傳到Azure上,但這樣的方式要顧慮到金鑰的存取。我們不可能將金鑰放在Client端來使用,這樣太危險了,若是網站應用程式,只要按一下F12就可以輕鬆取得。針對此問題,azure有一解決方案,透過金鑰,依據所需權限、使用期限等..來產生Shared Access Token(簡稱 SAS)。如下圖


圖片來源:azure.microsoft.com

[.NET Core] 將專案發行至IIS

圖片
繼上一篇關於組態設定後,再來測試一下如何將專案發行至IIS,依照官網說明,需先安裝如下:
Install the .NET Core Windows Server Hosting,會安裝檔包含.NET Core執行時所需要的Library,Runtime 等.更多請參考
,裝完IIS需重啟。 Web Deploy v3.6 Install HttpPlatformHandler 這是給 Web Deploy使用,請參考 IIS 設定
IIS 新增Site並將Pooling的CLR Version改成 No Managed Code


[.NET Core] 關於組態設定

圖片
.NET Core 1.0 釋出囉!看到此篇後,一時手癢來試一下...
在開始前要先安裝開發工具:
Visual Studio 2015 Update 3*.NET Core 1.0 for Visual Studio   安裝完畢後,本想說先寫個Hello World!就好了,但這樣好像沒學到什麼=.=..。所以來試試如何取得組態設定。一開始以為應該會是像之前的版本,直接使用Configuration.AppSetting就可以取到,但找不到可以使用的Method…,讀了相關文章後,才知道可以使用注入的方式取得。

Hyper-V 安裝Window 10 備忘筆記

圖片
今天在Hyper-V主機上,安裝新了一台新的虛擬主機Window 10,記錄一下自己手動調整的相關設定。用網芳連不到虛擬主機?防火牆允許檔案共用

Visual Studio 2015 移除git control

圖片
在VS2015,不小心將專案加入git版控後,想要解除繫結,卻找不到可用的命令....


解決方式 到專案目錄,將.git目錄、.gitattributes及.gitignore刪除(SHFIT+DEL)。ps:檔案檢視,將隱藏項目打開。


再重新打開專案後,繫結已移除


參考來源http://blog.wsoft.se/2016/05/19/remove-git-mapping-in-visual-studio-2015-stack-overflow/

Window 10 安裝語言包

圖片
我的Window 10本來的語言設定昰英文,今天更新10586後,變中文顯示,到控制台新增英文語系後,也無法使用,如下圖

IIS將網芳目錄設成站台

圖片
平時執行測試工作的主機,想將測試結果(.html,.xml等靜態檔案)讓外面可以直接透過Web直接瀏覽。由於此台主機對外並沒有開放,所以我將目錄設定共用後,透過另一台對外主機的IIS,將位置指定過來。如下圖



執行後,得到錯誤訊息,權限不足


實體Server轉成Hyper-V

近來公司的測試機,所執行的工作及設定越來越多,為避免改天一不小心機器掛了,要再重設一次相關設定..,決定將它轉成Hyper-V來使用。還沒開始前,先在本機作一下實驗,如何將實體OS轉成Hyper-V。

測試記錄
DiskToVHD   一開始使用的工具是DiskToVHD,但轉完後的vhdx運行後會出現錯訊息"No UEFI-compatible file system was found",此問題,國外文章的回應,開機磁不能為EFI.....。解決方法為將vhdx mount起來後,再透過另一個軟体轉檔,但我在第一個步驟Mount就發生錯誤了,所以放棄此作法(參考文章)。

SQL Server持續整合

圖片
目前的CI 架構,還缺一個資料庫持續整合的功能,來自動更新資料庫結構,今日剛好瞄到一篇舊文後,趕快來補上。
新增SqlServer Project,匯入現有的資料庫結構
建立發行檔,選擇目的資料庫


報表群組-多筆MasterDetail

圖片
報表需求:依據訂單編號為群組,顯示多筆訂單的Master/Detail資訊,如下圖POC


群組分頁 例:另一張訂單編號,則重新計算分頁及頁數 訂單主檔Master 訂單明細Detail 實作重點老人家對報表不是很熟....XD,實作完後,趕緊作功課將相關重點記下來。
加入Table,並將明細的欄位加入


Add Group


以訂單主檔的編號為群組依據


此時仔細看一下Detail的資料列,已被包在Group內,用括號及漢堡圖表示


新增OutsideGroup 顯示主檔的欄位資訊


此時資訊列的圖示也會顯示群組的括號,但與明細的不同,代表著為群組的Header,完整如下圖


預設在分頁資訊上不會顯示Table Header的資訊,所以需將設定 ReportOnNewPage打開




讓分頁資訊,跟著訂單編號重新計算,例:0001顯示 1/3,0002為1/5。
PageName:設為跟群組相同的訂單編號


最後加入顯示的分頁資訊

順道一提,若報表也需要顯示完整的分頁,可以使用OveralPageNumber跟OveralTotalPages 參考連結https://blogs.msdn.microsoft.com/robertbruckner/2010/04/25/report-design-reset-page-number-on-group/

[MVC] View切換不同主題

圖片
最近要作一個網站,在UI的呈現上,需讓使用者可以自行挑選色系及版型。實作前,先去參考了WordPress的作法,是根據設定來讀取themes目錄下的程式如: .php,.css.js 等。對照在.NET MVC上,要如何實作? 研究一下相關文章後,可以透過ViewEngine的實作,來達到所需要的功能。網站開工前,先作了一個簡單的POC來驗證一下。
ThemeViewEngine實作 預設的ViewEngine讀取方式不變(若沒有對應的Theme,使用預設),新增一個ThemeViewEngine來讀取Theme目錄底下的View。如下圖


MVC 使用CKEditor

圖片
第一使用CKEditor..,記錄一下所需功能的安裝過程。Nuget安裝 ckeditor-standard裝完後,引用所需的.js檔,及網頁載入的初始設定取代content text area 為 html editor。指定上傳圖檔到後端的Url。指定skin,更多skin可以到官網下載

Visual Studio 偵錯過慢

圖片
今早打開Visual Studio 2015,按下F5進行偵錯後,每一步的偵錯,異常的慢,尤其在呼叫其他Library的方法更是明顯,如下圖output,只能看見一些iis express的訊息。試著在Configuration / Debugging將一些設定關閉,但都無效.........,最後在IntelliTrace上看到,怎麼會是勾到第二項收集事件及呼叫訊息...。改回第一選項後,回復正常。若沒用到此功能,將Enable IntelliTrace取消,進入Debug會更快。

IIS 8 自動預熱

圖片
使用者反應第一次載入網頁很慢,想說目前的IIS 已有設定Always Running,照理說Pooling 回收後,應用程式應會自動執行,而不至於很慢才對。
如下設定:

Pooling Setting


Site Setting


實際測試時,在Applicaiton_Start輸出Log來觀察Pooling回收時,應用程式是否被執行。手動將Pooling後,Application_Start並沒有跑.....,查了一下相關文章,發現少裝了Application Initialization。


進一步指定網頁執行  上述的Application Initialization裝完後,每次的Pooling回收,就會自動執行應用程式。而若想在Pooling回收後,自動先執行特定網頁,可以在組態檔設定applicationInitialization,如下



ps:initializationPage可以設定多筆,但值不能重複
參考來源http://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-application-initialization
http://serverfault.com/questions/590865/how-can-i-warm-up-my-asp-net-mvc-webapp-after-an-app-pool-recycle

[Expression Tree] 取得IQueryable的查詢欄位

圖片
專案上有一需求,要提供一個共用方法,取得IQueryable<T>的查詢欄位,基本上若要取得欄位的話,只要透過type的GetProerties就可以取到。如下測試

Foo類別



測試程式,取得IQueryable內的屬性集合。



ClickOnce 無法更新最新版本

圖片
寫了一支應用程式,讓客戶端透過ClickOnce的方式執行,但之後的更新的版本,客戶端都無法下載,每次執行都停在舊版。一開始想說無法更新的話,乾脆將它先移除再重裝,到目錄刪除C:\Users\User\AppData\Local\Apps\2.0。還是無效,甚至使用保哥介紹的使用的使用mege.exe刪除,但都無效....。

 找了一下午之後,最後在chrome測試應用程式下載時,才發現是快取在Proxy Server 如下圖.