2018年3月12日 星期一

【Tomcat 8.0.50】安裝、移除 安裝在windows 服務裡面

【Tomcat】安裝、移除  安裝在windows 服務裡面
版本:tomcat 8.0.50

官網說明 網址:http://tomcat.apache.org/tomcat-8.0-doc/windows-service-howto.html#Installing_services

command
安裝
C:\apache-tomcat-8.0.50\bin>service.bat install




command
移除
C:\apache-tomcat-8.0.50\bin>tomcat8 //DS//Tomcat8


【Tomcat】Tomcat 8.0.50 RemoteAddrValve 設定

 Tomcat 8.0.5

org.apache.catalina.valves.RemoteAddrValve

提供兩個地方可以設定 XML
(針對1.舊版Tomcat的尚可設定,未來可能會拿掉)

1.C:\tomcat-install\conf\Catalina\localhost\
如果檔案不存在的話,就新增一個 manager.xml



2.新版:C:\apache-tomcat-8.0.50\webapps\manager\META-INF
context.xml

內地有個地方還蠻新的介紹 網址:https://www.w3cschool.cn/tomcat/zuxi1k90.html
tomcat 官網(Securing Management Applications)
網址:http://tomcat.apache.org/tomcat-8.0-doc/security-howto.html

2018年3月8日 星期四

【Tomcat】tomcat html Response Headers Cache-Control 200 ExpiresFilter jsp

當你遇到 Status Code:200 OK (from disk cache) 就會 GG

為什麼就會 GG ,因為瀏覽器會先讀取 暫存頁面.而不會先向 SERVER 要新的 頁面內容

透過 Tomcat JSP web.xml 裡面有提供 ExpiresFilter 機制就能處理這樣的狀況狀態


ExpiresDefault 代表 所有 MIME  text/plain image/png application/javascript...

若指定哪種類型 MIME
ExpiresByType text/html

以下這行,就會是 mas-age=0
now plus 0 second

以下這行,比對所有 url 網址
/*

若是Status Code:200 狀態
就會在 Response Headers 加上 Cache-Control: max-age=0

若是Status Code:304 狀態
預設會是略過不處理,這可以接受,因為比對 Server 跟 瀏覽端 雙方都相同狀態的意思

若是要在 tomcat log 中記錄的話
就是要到 C:\apache-tomcat-8.0.50\conf\logging.properties  <-- p="">最底下新增一行  org.apache.catalina.filters.ExpiresFilter.level = FINE
醬子就可以了

Tomcat 官網說明
http://tomcat.apache.org/tomcat-8.0-doc/config/filter.html#Expires_Filter

完整規範如下 大家可以參考 官網說明



















  <-- class="separator" config="" div="" filter.html="" http:="" org.apache.catalina.filters.expiresfilter.level="FINE" style="clear: both; text-align: center;" tomcat-8.0-doc="" tomcat.apache.org="" tomcat="" xpires_filter="">




2018年3月5日 星期一

2018年2月8日 星期四

【C#】API url parameter 參數 Encode 有趣的規範 cp950

【C#】API  url  parameter 參數 Encode 有趣的規範

web Client parameter 有含 中文 ,請注意 Api Server 系統 是utf8 接還是 big5 接 你的 參數

如果 api server 是  utf8 ,那很好,因為 html url 本身就是 follower utf8 格式

若 API SERVER 是BIG5 接 參數,請注意,
WEB CLIENT 的程式, 參數必需要再轉成 CP950 encode 編碼

如下:
Encoding cp950 = System.Text.Encoding.Default;
cp950 = Encoding.GetEncoding(950);

 string a = HttpUtility.UrlEncode(item.Value, cp950);  <----url big5="" nbsp="" p="">

為何要兩道手序,
因為  C# Encoding 有(utf8、utf16、utf32、ASCII) ,
就是沒有 BIG5格式

透過 Encoding GetEncoding 參數 950 幫我們抓 big5 格式回來..
=.=" 果然是美國人寫的程式...不是說要國際化嗎?

另外 網頁的 encodeURIComponent 字串會轉換成 UTF-8

所以程式接的時候是  HttpUtility UrlDecode(url)

但要再轉發 API 的話 就要看 對方  SERVER (參數)吃什麼  ContenType (utf8 or big5 ...)

以上

【C#】不能 var --->System.Web.HttpUtility.ParseQueryString (NameValueCollection)

【C#】不能 var  --->System.Web.HttpUtility.ParseQueryString (NameValueCollection)

要明確然指定 NameValueCollection

2018年2月6日 星期二

2018年2月1日 星期四

【Windows 指令】taskkill.exe 強制刪除 處理程序 PID


taskkill.exe 強制 刪除 處理程序 PID

C:\WINDOWS\system32\taskkill.exe /F /IM w3wp.exe /T


【C# NameValueCollection】 針對NameValueCollection 做 LINQ

        public static Dictionary ParseQueryString(string queryString)
        {
            System.Collections.Specialized.NameValueCollection nvc = System.Web.HttpUtility.ParseQueryString(queryString);

            var a = from key in nvc.Cast()
                    from value in nvc.GetValues(key)
                    where key != null
                    select new { key, value };

            return a.ToDictionary(pair => pair.key, pair => pair.value); ;
        }

2018年1月24日 星期三

【asp.net C#】在HttpClient的DefaultRequestHeaders上設置Cookie Header

可參考:
http://stackoverflow.com/questions/12373738/how-do-i-set-a-cookie-on-httpclients-httprequestmessage/13287224#13287224

https://d-fens.ch/2016/12/27/howto-set-cookie-header-on-defaultrequestheaders-of-httpclient/

重點兩種

【預設:HttpClientHandler(UseCookies=true)】

HttpClient <--httpclienthandler ookiecontainer="" p="">
cookieContainer.Add(baseAddress, new Cookie("CookieName", "cookie_value"));

【HttpClient <--httpclienthandler p="">
若是:HttpClientHandler(UseCookies=false) 則是手動加入header

httpClient.DefaultRequestHeaders.Add("Cookie", "auth=ArbitrarySessionToken");

2018年1月17日 星期三

【生活分享 】2018-01-13 台北文昌宮 2018年初 點燈 2018 年 禮品

【生活分享 】2018-01-13 台北文昌宮 2018年初 點燈 2018 年 禮品

狀元筆, 福星高皂, 米, 玻璃水壺, 保祐符



【股票分享】中鋼 成交 2018-01-17 成交單位:25.15

【股票分享】中鋼 成交 2018-01-17 成交單位:25.15

成交 25150元
電子手續費 15
交易稅:75   <=> 20150 * 0.003
淨收:25060元

總共雜費:90元 = 75 + 15

【轉編譯】html javaScript 使用到 encodeURIComponent

【轉編譯】html  java 使用到 encodeURIComponent

範例如下:
javascript
原值: http://tw.yahoo.com/
var a =encodeURIComponent('http://tw.yahoo.com/');

a 的編譯後結果 "http%3A%2F%2Ftw.yahoo.com%2F"

如果程式(C#, PHP,jsp, ....xooxxo)要接收「網頁」傳遞過來的值轉成正常的話
以下方式各程式範例

C#
result1 = System.Web.HttpUtility.UrlDecode(html_data);
String result2 = System.Uri.UnescapeDataString(result1);

Jsp
String htmlurl = req.getParameter("a");
htmlurl = java.net.URLDecoder.decode(htmlurl,"UTF-8");


最後說明 encodeURIComponent
主要是會針對特殊符號處理用

W3C 說明:http://www.w3school.com.cn/jsref/jsref_encodeURIComponent.asp
該方法不會對ASCII 字母和數字進行編碼,也不會對這些ASCII 標點符號進行編碼: - _ . ! ~ * ' ( ) 。


其他字符(比如:;/?:@&=+$,# 這些用於分隔URI 組件的標點符號),都是由一個或多個十六進制的轉義序列替換的。

詳細英文說明:
https://blogs.msdn.microsoft.com/yangxind/2006/11/08/dont-use-net-system-uri-unescapedatastring-in-url-decoding/

2018年1月16日 星期二

【Visual Studio 2015】相關下載連結

1.TypeScript for Visual Studio 2015 - 中文(繁體)
https://www.microsoft.com/zh-TW/download/details.aspx?id=48593

版本:2.6.2

File Name:2.6.2-TS-release-dev14update3-20171121.4\TypeScript_Dev14Full.exe

發佈日期:2018/1/12

File Size:10.4 MB


2.Visual Studio 2015的實驗性 ASP.NET Core + Angular模板
https://angular.io/guide/visual-studio-2015

2018年1月15日 星期一

【NodeJS】官網 下載點 及 VS2015 安裝說明 & IIS 設定

FTP
Node js下載點:
https://nodejs.org/dist/
我是下載 v.6.9.5 版本

VS2015 安裝說明
https://blog.josequinto.com/2016/05/04/how-to-configure-visual-studio-2015-integration-with-latest-version-of-node-js-and-npm/#Node-js

IIS 安裝說明
http://www.xiaoyebailong.com/index.php/2016/10/27/67684.htm

other
http://gigamine.blogspot.tw/2017/12/webnodejs-expressangularbootstrapwebsto.html
http://gigamine.blogspot.tw/2017/12/webnodejs-expressangularbootstrapwebsto.html

2018年1月10日 星期三

【Windows Tomcat 8 up】startup.bat 一閃 無執行 JAVA_HOME, JRE_HOME, CATALINA_HOME,


【Windows Tomcat 8 up】startup.bat 一閃 無執行

請閱讀安裝檔 RUNNING

其中有必要條件幾個項目要在電腦設定,

JDK 套件 包含了 JRE

也可以另外下載 JRE 套件

設定:系統內容\進階\環境變數
【使用者變數】
1.新增
變數名稱:CATALINA_HOME
PATH 指定位置:Tomcat 所在主目錄位置
C:\apache-tomcat-8.0.50

2.新增
變數名稱:JAVA_HOME
Path 路徑:C:\Program Files\Java\jdk1.8.0_112
備註:要完整路徑,否則會有 bat 起不來

3.新增 (請注意,若是要指定 jre 版本.就要新增)
變數名稱:JRE_HOME
Path 路徑:C:\Program Files\Java\jre1.8.0_131

JAVA_HOME 或 JRE_HOME 二擇一


【系統變數】
path
%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

or 直接指定

C:\Program Files\Java\jdk1.8.0_112\bin;C:\Program Files\Java\jdk1.8.0_112\jre\bin;

查詢變數是否下對

C:\Users\Administrator \ echo %JAVA_HOME%
C:\Program Files\Java\jdk1.8.0_112

C:\Users\Administrator \ echo %Jre_HOME%    <-- p="">C:\Program Files\Java\jre1.8.0_131

C:\Users\Administrator \ echo %CATALINA_HOME%

C:\apache-tomcat-8.0.50


catalina LOG 記錄
有指定 JRE_HOME
只有 JAVA_HOME



範例設定如下:
有指定 JRE_HOME 畫面


測試是否正確成功的最好方式

Tomcat「安裝」服務

cmd 指令:C:\apache-tomcat-8.0.50\bin\service.bat install

就會看到 using java_home 跟jre_home 路徑

額外 問題 java -version 版本不對

連結1:https://blog.csdn.net/yaozhiwei1019/article/details/77774636
連結2:https://hk.saowen.com/a/cecff7b7ca99a4a51fb28f6f30708fea23b6375271520eb975e927cf30a435b7

2018年1月4日 星期四

【css ie 11 v11.0.47 以上 】tab 鍵順序出現問題

【css ie 11 v11.0.47 以上】KB4051034

【問題】

在 href #content 
使用 tab 會出現順序問題


只有ie 11 47 48 49 以上都會有此問題,

因為我Windows Update 只到 ie 11 v46 版,都還正常

chrome 就很正常,firefox 也很正常...就ie v47以上就不正常...IE 真的很特別
2017-11 適用於 Windows 7,x64 架構系統的每月品質彙總套件預覽 (KB4051034)



【解決】
避免問題出現, 還是不關聯在 div 上,直接在 href 上建一個 id=content 就能正常





2017年12月21日 星期四

【表單 Form】填寫超過30 分鐘,未操作,透過AJAX 來觸發使用者行為

【表單 Form】填寫超過30 分鐘,未操作,透過AJAX 來觸發使用者行為
避免 被強制清除Session

$(function () {
    setInterval(function() {
        $.ajax({
            url: "Ping.aspx",
            cache: false
        });
    }, 1800000);
});

2017年12月19日 星期二

【Asp.net C# Dictionary】Dictionary 包 Dictionary 如何 直接new 資料

【Asp.net C# Dictionary】Dictionary 包 Dictionary 如何 直接new 資料

    Dictionary> A =
    new Dictionary>()
    {
        { 1, new Dictionary {{ "Index", "B"}}}
    };

2017年12月14日 星期四

【Windows Service 服務 安裝/移除】指令 InstallUtil vs 指令 sc

【指令:InstallUtil】
指令說明網址:https://docs.microsoft.com/zh-tw/dotnet/framework/tools/installutil-exe-installer-tool
MSDN 關於InstallUtil說明網址 :https://msdn.microsoft.com/zh-tw/library/50614e95(v=vs.110).aspx

註冊服務
C:\Windows\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe C:\MyService.exe
or
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\installutil.exe

刪除服務
C:\Windows\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe C:\MyService.exe /u
or
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\installutil.exe /u

【指令:sc】
sc create | delete | config 服務名 [參數]
註冊服務
sc create Tomcat binPath= F:\apache-tomcat\bin\startup.bat start= auto
刪除服務(服務名稱)
sc delete MyService


刪除時要先查詢服務名稱
COMMAND 指令
services.msc

2017年11月30日 星期四

【Jquery Validate and Unobtrusive )】有趣的 驗證機制 發生 'settings' of undefined

有趣的 驗證機制 發生 'settings' of undefined

在 ASP.MVC 上 頁面提供 驗證 輸入機制

Jquery.Validate (Jquery Validate)

Jquery.Validate.Unobtrusive (Jquery Validate Unobtrusive)

HTML 屬性中  有   data-val="true" 就會去啟用 Jquery.Validate.Unobtrusive  機制
Jquery.Validate.Unobtrusive取代掉Jquery.Vlidate error 錯誤訊息顯示位置

會相對應對照 error 訊息 如下
data-valmsg-for="Name" data-valmsg-replace="true"


並且也會對應到 錯誤訊息總覽(data-valmsg-summary) ,如果你頁面有的話 如下:
【無法送出原因如下】



如果沒有 data-val="true"
會變成 Jquery.Validate 處理

就會直接在你的 驗證INPUT 下新增一個 error label 錯誤訊息

如果你頁面上沒有任 屬性有  required

但你另在 JavaScript 上新增

$("#Name").rules('add', {
                required: true,
                messages:{
                    filecheckvalidation: "身分證-正面(必填)"
                }
            });


就會發生 錯誤 Jquery.Validate.js 錯誤 如下:

jquery.validate.js:147 Uncaught TypeError: Cannot read property 'settings' of undefined
    at n.fn.init.rules (jquery.validate.js:147)
    at HTMLDocument. (Index:518)
    at i (jquery-1.12.4.min.js:2)
    at Object.fireWith [as resolveWith] (jquery-1.12.4.min.js:2)
    at Function.ready (jquery-1.12.4.min.js:2)
    at HTMLDocument.K (jquery-1.12.4.min.js:2)


因為沒你有啟用 Jquery.validate.js init 機制

必需在 javascript 中先提供 以下指令才會啟用

$("#MyForm").validate(); <--- id="" span="">

2017年11月27日 星期一

【ASP.NET MVC 5】Checkbox 多選 Required 問題

【ASP.NET MVC 5】Checkbox 多選 Required 問題

可參考以下文章:
http://blog.darkthread.net/post-2011-09-02-jquery-validate-ubnotrusive-checkbox-required.aspx

http://blog.degree.no/2012/03/validation-of-required-checkbox-in-asp-net-mvc/

http://itmeze.com/2010/12/06/checkbox-has-to-be-checked-with-unobtrusive-jquery-validation-and-asp-net-mvc-3

我的做法
單選就 radiobutton
複選就 checkbox 搭配 ValidationAttribute 使用
但我不使用 boolearn  model 搭配 List

至於單選的 CheckBox 呢???嘿嘿嘿

SERVER 跟 CLIENT 都新增

【SERVER   擴充】
public class CheckBoxRequiredAttribute : ValidationAttribute, IClientValidatable
    {

        public CheckBoxRequiredAttribute()
        {

        }


        public override bool IsValid(object value)
        {
            bool result = false;
            if (value == null)
                return result;

            List r = value as List;
            if (r != null && r.Count > 0)
                result = true;

            return result;
        }

        public IEnumerable GetClientValidationRules(
            ModelMetadata metadata,
            ControllerContext context)
        {
            var rule = new ModelClientValidationRule()
            {
                ValidationType = "checkboxrequired",
                ErrorMessage = String.Format("{0} 欄位是必要項。", metadata.DisplayName)
            };

            yield return rule;
        }

    }

【CLIENT 擴充】
$.validator.unobtrusive.adapters.add("checkboxrequired", function (options) {


2017年11月6日 星期一

【ASP.NET ASP.MVC】Captcha 文字驗證 + Microsoft.Speech SpeechSynthesizer 語音辨識(文字轉語音服務) for Web Application

【ASP.NET ASP.MVC】Microsoft.Speech 語音辨識 文字轉語音

一、要使用 MVC Captcha 

就要用到 https://captchamvc.codeplex.com/

去下載 整包 mvc3、mvc4、mvc5   source code 加到Web專案..

1.調整:Interface\IStorageProvider.cs
新增:ICaptchaValue Value(string token, TokenType tokenType);

2.調整:Infrastructure\SessionStorageProvider.cs
去COPY  GetValue 複製一個  public virtual ICaptchaValue Value(string token, TokenType tokenType)

 備註 掉//ValidateKeys.Remove(token);

3.調整:CookieStorageProvider
去COPY  GetValue 複製一個 改叫 Value

然後引用專案,就可以使用最基本的 Captcha ,要怎麼改隨你怎麼改,可以省點工

二、Microsoft.Speech 語音辨識


1.請先參照該 文章安裝好軟體跟設定檔 如下
網址:http://terryhung.pixnet.net/blog/post/34657057-%E8%AE%93-windows-7-%E5%B0%88%E6%A5%AD%E7%89%88%E3%80%8C%E6%96%87%E5%AD%97%E8%BD%89%E6%8F%9B%E8%AA%9E%E9%9F%B3%E3%80%8D%E5%8F%AF%E4%BB%A5%E9%81%B8%E6%93%87

安裝軟體共有:
01_SpeechPlatformRuntime_x86.msi
02_SpeechPlatformRuntime_x64.msi
03_MSSpeech_TTS_zh-TW_HanHan.msi  <--- 1.="" p="">04_Patch_x86.reg
05_Patch_x64.reg

文章外額外要再安裝 (請自行Google =>做人不能太懶)
06.MicrosoftSpeechPlatformSDK_X64.msi   <--- br="" erver=""> 07.MicrosoftSpeechPlatformSDK_x86.msi   <--- br="" erver=""> 
<--- 1.="" p=""><--- br="" erver=""><--- br="" erver="">
<--- 1.="" p=""><--- br="" erver=""><--- br="" erver="">佛心下載: https://www.microsoft.com/en-us/download/details.aspx?id=27226
<--- 1.="" p=""><--- br="" erver=""><--- br="" erver="">
2.引用 Microsoft.Speech  (請勿使用內建的:System.Speech )
路徑:C:\Program Files\Microsoft SDKs\Speech\v11.0\Assembly\Microsoft.Speech.dll
備註:該路徑是因為你裝置了 MicrosoftSpeechPlatformSDK_x86
圖示: Microsoft.Speech 引用


3.程式碼
我就直接貼圖..做人不能太懶
圖示: Asp.net MVC 使用的程式碼 SpeechSynthesizer
備註:可以不用Foreach 自行可以用linq 直接找到也比較簡潔
Show 一手 如下:
                        if (synth != null)
                        {
                            Lang = synth.GetInstalledVoices()
                            .Where(o => o.VoiceInfo.Name.Contains("TW"))
                            .Select(o=>o.VoiceInfo.Name).FirstOrDefault();
                        }
<--- 1.="" p="">
<--- 1.="" p="">最後:
<--- 1.="" p="">1.IIS 不用設定..找了太多冤路....
<--- 1.="" p="">2.Speech 有限制系統 
<--- 1.="" p=""> 請參考:https://msdn.microsoft.com/en-us/library/hh362873%28v=office.14%29.aspx#Software Requirements
3.我的Web 是架在 Windows Server 2008 R2
4.不會寫view 的人,可以參考這篇:https://forums.asp.net/t/2127539.aspx?How+can+I+play+a+wave+file+in+mvc
怕文章GG 我還是貼給圖給大家 如下:
5.html 有很多規格播放 可參考這篇文章,寫的很不錯:https://dotblogs.com.tw/knightzone/2013/11/07/127250

【ASP.MVC】 剛好裝好SERVER , 佈署 MVC 出現的問題

剛好裝好SERVER , 佈署 MVC 出現的問題

1.500 錯誤 ,請重新安裝
%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -ir


2.必安裝 KB980368
安裝此更新可讓處理常式對應能正確地搭配無延伸型 URL 使用。

2017年11月1日 星期三

【Bootstrap】(img-responsive) 導致 a:foucs 失效 有陷阱 要注意 導致 tab 鍵

【Bootstrap】img-responsive 有陷阱 要注意 導致 tab 鍵 foucs 失效


(img-responsive) 導致 a:foucs 失效

修正方法

a:focus .img-responsive {
    outline-style: dotted;
    outline-color: #4169E1;
    outline-width: 2px;
}

參考網址:https://stackoverflow.com/questions/24164727/focus-not-working-on-images-during-tab-navigation

2017年10月26日 星期四

2017年10月2日 星期一

【XML Signature】XML 簽章 簽名 Signature c#

維基說明:https://zh.wikipedia.org/wiki/XML_Signature

Xml  傳送資料格式分兩種
1.soap
2.binary serialization

用徒:
1.銀行 XML 格式傳遞信任方式
2.web api xml 簽章、驗章確認 飛鴿傳書 認可


XML Signature 有點像  OAuth 2.0 ,但又不像

OAuth 2.0 是「信認夥伴」驗證,雙方必需到對方那邊留下資料做「證據」

XML Signature 是 A君「個人印章」在「信封」上蓋章,丟給「郵差」,
郵差丟給「收件人」,「收件人」目視驗證 蓋章 上是否A君的章,若是再打給「信封」查閱內容

2017年9月27日 星期三

2017年9月25日 星期一

【Entity Framework】IQueryable VS IEnumerable 用法 或 差別  (ASP NET, Entity Framework,C#)

IQueryable 每次直接撈 DB 資料庫 , 花費 DB 暫存記憶體

IEnumerable 第一次撈 DB 資料庫,花費 DB 暫存記憶體,以及暫存記體在(Web.IIS 程序)上
    再撈第二次,直接勞取「暫存記體在(Web.IIS 程序)上」,不再撈 DB
    除非 暫存記體在(Web.IIS 程序) 被 Entity Framework 指名 清掉,才會重新撈取