Pages

2015-08-26

ASP.NET發送三竹簡訊服務

購物網站在對買家發送下單簡訊,可利用一些簡訊服務商的WebAPI來傳送,以三竹簡訊為例,申請流程為:

  1. 註冊公司帳號(純一編號),向業務要求開通WebAPI存取的權限,對方會提供API SDK文件,並贈送100點作測試。
    API Documents
  2. 寄發單筆簡訊是以Http GET呼叫API,Doc文件都有提供Link範例,多筆簡訊則用Http POST方式,內容以INI文件格式撰寫,但只支援Big5編碼。由於單次發量沒有很多筆,因此這多筆API POST就略過沒測試:
    Multiple Sample
  3. 為了支援多國語言,測試其Unicode簡訊函式,使用utf-8傳送。相關參數只需要填寫「必要」欄位即可,其他欄位不填。
    API Params
  4. 多國語言簡訊API沒有多筆發送POST模式,因此程式裏使用loop迴圈,每筆間隔1秒來實作群發功能。

要呼叫遠端Web API,可以使用.NET 4.0的WebClient或HttpWebRequest類別來實作,我是使用.NET 4.5以上才具有的HttpClient類別,不使用它的非同步功能。

Code Snippet

後台簡訊設定畫面:

SMS Config

2015-08-22

Web虛擬路徑轉換成實體路徑(MapPath)

要在Web環境將虛擬路徑(~/XXX/)轉換成實體磁碟Path, 一般都會使用下列4種函式作轉換:

  1. Page.MapPath()
  2. Server.MapPath()
  3. Request.MapPath()
  4. HttpContext.Current.Server.MapPath()

當把處理函式整理成Model類別時,為了減少傳入Page類別,就會使用第4種方式。然而若呼叫者(Caller)不是由Web頁面觸發的話,就會引起HttpContext.Current類別Null Reference錯誤。

因此在.NET 4.5以後版本,建議使用:

string phyPath = System.Web.Hosting.HostingEnvironment.MapPath(virPath);

這個方式即使在Global.asax中使用,也能正確解析虛擬相對路徑,是包裝Model Class中取得實體路徑較為建議的方式。

2015-08-19

NuGet Source Unreachable問題

當在VS裏使用NuGet Package Manager Console安裝套件時,有時候會出現以下錯誤:
The source at nuget.org [https://www.nuget.org/api/v2/] is unreachable. Falling back to NuGet Local Cache at XXX.

NuGet Source Unreachable

建立新的方案,則NuGet運作正常,估計某個地方出錯了。重開VS程式或可修正,但急於當下,可直接加下-Source選項指令:
PM> Install-Package bootstrap -Source nuget.org

網上討論連結:
c# - Source unreachable when using the NuGet Package Manager Console - Stack Overflow http://stackoverflow.com/questions/24025409/source-unreachable-when-using-the-nuget-package-manager-console

2015-08-12

Taipei Free臺北公眾區免費無線上網方式

使用Taipei Free 臺北公眾區免費無線上網時,無論桌機或手機連上「TPE-Free」WiFi SSID後,仍需要開啟登入網頁輸入帳密。雖然帳密可以記憶下來,但有時仍會發生無法自動登入的問題。以下提供依自己經驗摸索而來的直接上網方式。

桌機版:

1. 連上「TPE-Free」SSID.
2. 打開「http://www.gov.taipei/lp.asp?ctNode=65439&CtUnit=10400&BaseDSD=60&mp=100003」這網址,也可以在桌面設成捷徑,方便點擊。它其實就是正常登入後的「熱門活動」頁面,直接連接就會啟動帳密登入。
TPE-Free Desktop Page 
3. 成功上網。

手機版:

1. 連上「TPE-Free」SSID.
2. 安裝「Taipei Free 臺北公眾區免費無線上網」這APP, 它是官方出的,連線能力比「快速登入Wi-Fi熱點 (Taiwan)」這套APP精準。
TPE-Free Phone
3. 成功上網。

BTW,當日後全民上網成為生活中一部分時,希望市政府能把這種煩人的登入帳密方式取消。透過裝置上網連線的網卡MAC位址作資料庫Data Mining分析搜尋,足以達到資訊安全的管理底線,或者實名制+綁定裝置網卡MAC位址亦可。

2015-08-05

修改ADO.NET Entity Data Model的Namespace

當新增一個ADO.NET Entity Data Model並自動生成相關的表格Table POCO Class,雖然有指定了特定的Namespace命名空間,但你會發現生成後的Table POCO Class之命名空間,仍以是該edmx檔所在目錄路徑去命名的(project namespace + folder heirarchy)。就算手動搜尋替代掉Namespace,下一次Refresh edmx檔仍又恢復回來。

原來除了指定edmx檔的Namespace值外,還要手動修改下面兩個T4檔設定:

 image image

選定*.tt檔滑鼠右鍵,查看到Properties設定,在「Custom Tool Namespace」處寫入自訂的Namespace(預設為空白),它可自動更新其下產生的cs檔之命名空間。

image

相關討論:
c# - T4 Generation: Where does VsNamespaceSuggestion() pull from? - Stack Overflow
http://stackoverflow.com/questions/5953094/t4-generation-where-does-vsnamespacesuggestion-pull-from