關於網路那些事...

Marketing, SEO, Web trends, Programming tutorial, Web design, and Life event...

ASP.NET C# 不同瀏覽器在 buffer 緩衝區 與Response.Flush() 表現差異比較

ASP.NET C# 不同瀏覽器在 buffer 緩衝區 與Response.Flush() 表現差異比較

ASP 輸出內容到網頁的方式基本上有兩種

  1. 直接輸出
  2. 緩衝區輸出

直接輸出的方式,每次連線 server 都要執行程式

buffer 緩衝區輸出方式,則首次連線會需要執行程式,程式會將結果放一份在緩衝區,後續連線則是直接從緩衝區讀取數據

緩衝區+大量資料

在 ASP 載入頁面時,若遇到需載入大量內容的情況,若使用到緩衝區

server 端開始載入大量資料時,會需要一段時間將資料一筆一筆放入緩衝區,直到所有數據完成之後,才會在前端頁面產出

此時會耗費較久時間,才會將資料呈現在畫面上

緩衝區資料輸出的時間點

輸出緩衝區資料的方式有兩種: Response.End 或者 Response.Flush

Response.Clear 則是可以清除緩衝區的資料(清除後就無法再送到前端)

Response.Clear 通常都會搭配 Flush 一起使用

使用Flush 預先支出緩衝區內容

這時就可以運用 Response.Flush() 解決等待時間過久的問題

在使用 Response.Flush() 時,要先將 Response.BufferOutput 設定為 true,避免再運行過程中會出現問題

Response.Flush() 可以在資料存取到緩衝區的同時間,立即輸出緩衝區的資料,這時server會持續與頁面保持請求連線,當Flush 拋出資料時,就立即反映在頁面

蒐集瀏覽器資料的處理方式,在不同瀏覽器會有不同處理方式

Chrome, Firefox, Edge 在接收到資料後,就會立即進行渲染,當資料是屬於續傳類型,就會在畫面看到一筆一筆資料逐步出現 須特別留意的是,Firefox, Edge 必須要等到資料為256字元才會真正進行flush輸出緩衝資料 Chrome 則可以做到即時

IE11 則是會等待所有資料都蒐集完畢後,才會一次處理

清除緩衝區資料

透過 Response.Clear() 可以刪除緩衝區所有的內容,使用前同樣要先將 Response.BufferOutput 設定為 true,避免再運行過程中會出現問題

測試

關閉 buffer,直接輸出網頁端,資料畫一筆一筆出現

Continue Reading

用批次檔清除 Windows 暫存檔

在 windows 環境,可以透過批次檔方式一鑑清除暫存檔案,釋放空間

將下列內容儲存為 cleanner.bat

Continue Reading

MySQL - 取得十分鐘內、一小時內、一天內 的資料

MySQL 取得指定分鐘、指定小時或指定天數內的資料

方式介紹:

Continue Reading

股票市場 - LME (London Metal Exchange) 倫敦金屬交易所 簡介

LME 期貨 - Carry trade

LME (London Metal Exchange) 倫敦金屬交易所

提供鋁、銅、鉛、鋅、鎳和錫等期貨交易

(1877~today) 2012-06 被香港以 22 億美元收購

Continue Reading

Git 解決出現 warning: LF will be replaced by CRLF ... The file will have its original line endings in your working directory.

Git 解決出現 warning: LF will be replaced by CRLF … The file will have its original line endings in your working directory.

在 windows,git add 可能會出現 LF will be replaced by CRLF 錯誤訊息

warning: LF will be replaced by CRLF ... The file will have its original line endings in your working directory.

原因是因為 windows 所使用的換行符號是 CRLF

Git 會在提交的時候為了將換行符號統一,將 CRLF 轉換為 LF,並且會在偵測到需轉換時,會提出警示訊息

若不希望出現此錯誤警示,不要將 CRLF轉換為LF,則可以執行以下指令:

rm -rf .git
git config --global core.autocrlf false
git init
git add .

但原則上,不建議將這個動作關閉

Continue Reading

MySQL - 取得平均為 NULL 如何轉為0、以及計算總數方法

MySQL 取得平均級總數的方式,可以直接用現成的方法

AVG 以及 COUNT

這裡會另外再分享一個小技巧,說明如何將 AVG 取得結果為 NULL 如何轉為零

Continue Reading

股票市場 - 選擇權重點介紹 (2)

[投資人的正逆價差]

一般來說,投資人的輸贏都會符合 28 法則

在選擇權的市場中,投資人對未來市場預期可分為:

正價差 - 預期未來會漲,看多 逆價差 - 預期未來會跌,看空

買賣雙方都能接受的交易價格,就稱為均衡價格

因此,要透過選擇權獲利,通常都要有預期盤勢會有大震盪才會有獲利空間

一般股市平穩的期間,只需要買賣期貨即可

或者可以選擇用 賣出買權、賣出賣權 來獲利

[買權 賣權]

不管買權或賣權,通常我們都會選擇買方身分

買權 (CALL Option) 未來看漲 - 買方 (買進買權 LONG CALL) : 可以在未來購買特定價格的權力 做多 - 賣方 (賣出買權 SHORT CALL) : 必須履行「賣出」「空頭期貨合約」的義務 放空

賣權 (PUT Option) 未來看空 - 買方 (買進賣權 LONG PUT) : 可以在未來賣出特定價格的權力 做空 - 賣方 (賣出賣權 SHORT PUT): 必須履行「買入」「多頭期貨合約」的義務 做多

買權(CALL) 賣權(PUT)
選擇權買方 付出權利金,取得未來買入指定價位股票權力,未來股價上漲即獲利
單次獲利金額高
獲利機率較低
若虧損,頂多賠掉權利金
付出權利金,取得未來賣出指定價位股票權力,未來股價下跌即獲利
單次獲利金額低
獲利機率較大
若虧損,金額較大
選擇權賣方 收取權利金,未來須保證買進履約指定價位股票,未來股價下跌即獲利
單次獲利金額高
獲利機率較低
若虧損,頂多賠掉權利金
收取權利金,未來須保證賣出履約指定價位股票,未來股價上漲即獲利
單次獲利金額低
獲利機率較大
若虧損,金額較大

[權利金(Premium)與保證金]

權利金會受到履約價影響,以CALL為例,買低權利金就高 以PUT為例,賣高(用比較高去放空)權利金就高

Continue Reading

ASP.NET C# - URL 網址參數解析,取得網址參數

ASP.NET C# URL 網址參數解析,取得網址參數

ASP.NET 提供許多 Request 屬性,可以對URL進行分析,取得網址參數

例如,這裡示範網址為:

https://my.url.com:8080/Detail/Page/List.aspx/showmore?mid=20#main

底下分別列出解屬性及解析結果:

參數 結果
Request.ApplicationPath /
Request.Url.Host my.url.com
Request.Url.Port 8080
Request.Url.Scheme https
Request.Url.Authority my.url.com:8080
Request.Path /Detail/Page/List.aspx/showmore
Request.Url.LocalPath /Detail/Page/List.aspx/showmore
Request.PathInfo /showmore
Request.Url.Query ?mid=20
Request.CurrentExecutionFilePath /Detail/Page/List.aspx
Request.FilePath /Detail/Page/List.aspx
Request.RawUrl /Detail/Page/List.aspx/showmore?mid=20
Request.Url.PathAndQuery /Detail/Page/List.aspx/showmore?mid=20
Request.Url.AbsoluteUri https://my.url.com:8080/Detail/Page/List.aspx/showmore?mid=20
Request.Url.AbsolutePath /Detail/Page/List.aspx/showmore

取得系統路徑

參數 結果
Request.PhysicalPath C:\wwwroot\Detail\Page\List.aspx
System.IO.Path.GetDirectoryName(Request.PhysicalPath) C:\wwwroot\Detail\Page
Request.PhysicalApplicationPath C:\wwwroot\
System.IO.Path.GetFileName(Request.PhysicalPath) List.aspx

解析參數

參數 結果
Request.Url.Segments /, Detail/, Page/, List.aspx/, showmore

Continue Reading

ASP.NET HTML (UrlEncode, UrlDecode, HtmlEncode, HtmlDecode)相關編碼方法

ASP.NET HTML相關編碼方法

ASP.NET 針對HTML相關的編碼,可以分成網址編碼、網頁內容編碼兩部分

這裡分別記錄這些常見的編碼方式,提供參考

Continue Reading

如何解決 IIS 空白畫面或執行ASP.NET 時出現【處理常式 "PageHandlerFactory-Integrated" 的模組清單中有錯誤的模組 "ManagedPipelineHandler"】

通常在新的環境,發布ASP.NET網頁到 wwwroot 之後

最常見的異常狀況有兩種:

  1. IIS 空白畫面
  2. 處理常式 “PageHandlerFactory-Integrated” 的模組清單中有錯誤的模組 “ManagedPipelineHandler”

這裡針對這兩種方式來進行說明,如何解決

[IIS空白]

IIS 空白通常是靜態網頁選項未設定

因此,先開啟控制台 > 程式集 點選 解除安裝程式

IIS 空白畫面

接著點選 開啟或關閉windows功能

IIS 空白畫面

在功能選項中,將 Internet Information Services > World Wide Web 服務 > 靜態內容 勾選

IIS 空白

接著再開啟畫面,看看是否還是空白

IIS 空白 - 在勾選靜態內容後,畫面仍是空白該如何處理

首先,在wwwroot目錄新增一個 index.html ,我們放入簡單的顯示文字

index.html

<!DOCTYPE html>
<html>
<head>
	<title>Hello world</title>
</head>
<body>
Hello world
</body>
</html>

若有在畫面中看到 Hello World,就表示靜態內容已經能正常運作瞜

可以刪除 index.html ,重新發布看看是否已經正常

若 ASP.NET 發布仍出現白畫面問題,則試試接下來得解決方式

Continue Reading

ASP.NET C# - MS SQL Server 連線

ASP.NET C# - MS SQL Server 連線

ASP.NET 連接 MS SQL Server 方式

首先,載入 System.Data.SqlClient 空間命名,取得與 MS SQL Server 連線查詢處理相關功能

Continue Reading

ASP.NET C# - Server Controls

ASP.NET C# - Server Controls

Microsoft 採取跟 Windows Form 應用程式一樣的方式來建立網站應用程式,

動態處理部分會放在 .aspx,事件處理程式則會將程式碼後置(code-behind) 放在 .cs或.vb

所以都必須先建立一個 form 表單範圍,並且添加 runat=“server”

在 form 內部,就能開始添加控制項,或者事件驅動,

因此,想在HTML元素進行 server side處理,就要向這些元素添加 runat=“server” 屬性,

以及註冊 ID 作為辨識,ID在同一個webForm中不可以重複

例如,在 server side 賦予超連結的url值

在 C# 檔案 C#

mylink.HRef = "http://google.com";

在HTML 表單中,超連結標籤新增了HtmlAnchor 服務器控制向之後,

server side就會透過id來辨識,操控賦予值

aspx

<form id="form1" runat="server">
	<a id="mylink" runat="server">my link</a>
</form>

標準控制項

前面提到,在 Web 設計會透過一個 form 的區塊來處理動態資料

微軟提供相當多的標準控制項,可以直接應來建立各種網頁功能,例如: Label, TextBox, Button, LinkButton, ImageButton, HyperLink, DropDownList, ListBox, CheckBox, CheckBoxList, RadioButton, RadioButtonList, Image, ImageMap, Table, BulletedList, HiddenField, Literal, Calendar, AdRotator, FileUpload, Wizard, Xml, MultiView, Panel, PlaceHolder, View, Substitution, Localize

Continue Reading

ASP.NET C# 判斷 HTTP REQUEST 請求來源 KEY 是否存在

ASP.NET C# 判斷 HTTP REQUEST 請求來源 KEY 是否存在

HTTP 請求來源可以為 POST 或 GET 類型,並且夾帶 key 與 value

常用到會先檢查是否存在 key

若不存在則返回錯誤,或者對應處理,例如表單欄位未填

若存在key才進行正常程序,例如儲存表單

有幾種方式可以用來檢查

這裡以取得GET的參數來說明如何檢查 Key 是否存在

Continue Reading

ASP.NET C# 判斷HTTP來源類型,取得HTTP 請求(GET, POST)參數

ASP.NET C# 判斷HTTP來源類型,取得HTTP 請求(GET, POST)參數

透過 C# for ASP.NET 的 Response 可以取得HTTP請求相關訊息

取得HTTP Request 類型

可以透過下面兩種方式取得HTTP Request 類型 (GET、POST…)

Request.RequestType
HttpContext.Current.Request.HttpMethod

取得 GET 參數

透過 Request.QueryString[“Key”] 可以取得 GET 參數

取得 POST 參數

透過 Request.Form[“Key”] 可以取得 POST 參數

取得HTTP 參數

如果不區分 GET POST ,透過 Request[“Key”] 只要key相符就取得

若GET POST 同時有相同的key,就會以GET為主

判斷是否為頁面 POST_BACK

當表單在同頁送出POST,就可以用 Page.IsPostBack 來偵測

範例

下方示範 HTTP 請求:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        // 取得HTTP Request 類型
        Response.Write(HttpContext.Current.Request.HttpMethod + "<BR>");//GET, POST...
        // 取得HTTP Request 類型
        Response.Write(Request.RequestType + "<BR>");//GET, POST...

        if (Request.RequestType == "GET")
        {
            //取得 GET 值
            Response.Write(Request.QueryString["TextBox1"] + "<BR>");
        }
        if (Request.RequestType == "POST")
        {
            //取得 POST 值 - 欄位名稱 TextBox1
            Response.Write(Request.Form["TextBox1"] + "<BR>");
        }

        // 不管GET或POST,都會取得值 (以 GET 值為優先)
        Response.Write("Always show:" + Request["TextBox1"] + "<BR>");

        if (Page.IsPostBack)
        {
            Response.Write("PAGE POST BACK<br>");
        }

    }
}

Continue Reading

ASP.NET C# JSON 格式轉換

ASP.NET JSON 格式轉換

在這裡,選擇透過 (Json.NET)[https://www.newtonsoft.com/json/help/html/Introduction.htm] 這款套件來協助處理物件轉換為JSON格式

Continue Reading

ASP.NET C# - 如何取得來源 IP

取得 Clinet 來源IP的方式如下:

Continue Reading

ASP.NET C# 生命週期

ASP.NET 生命週期

ASP.NET 可以動態的生成頁面,而運作的架構生命週期主要可以分為:

  • 應用程式生命週期(Application Life Cycle)
  • 頁面生命週期(Page Life Cycle)

[應用程式生命週期(Application Life Cycle)]

  1. 當使用者透過瀏覽器訪問時,瀏覽器會先向web server傳送請求,
  2. 在 server 端在一開始都會先執行:
  • 建立 ApplicationManager Class 物件
  • 建立 HostingEnvironment Class 物件,提供請求來源有關的訊息。
  • 建立應用程式初始成員
  1. 建立 Response 物件,包括 HttpContext,HttpRequest,HttpResponse 都會在這時被初始化建立
  2. HttpApplication 物件被實體化,並且被指派給 request
  3. Request 被 HttpApplication class 處理,並根據處理的結果呼叫不同事件

[頁面生命週期(Page Life Cycle)]

當頁面被請求,會先被載入 server 的記憶體中進行處理,接著再傳送回瀏覽器,再將項目從記憶體中卸載

整個頁面生命週期主要有

初始化 (Initialization) 實體化頁面控制 (Instantiation of the controls on the page) 階段修復及維護 執行事件處理程式 顯示頁面

下方列出 ASP.NET 頁面不同階段

  • 網頁要求(Page Request)

  • 開始進入生命週期(Starting of page life cycle) 在這階段,會檢查來源物件,如果是舊的請求或者是表單 post back,就會將 IsPostBack屬性設定為true

    Continue Reading

ASP.NET 基礎入門 Hello World

ASP.NET 基礎入門 Hello World

在開始前要先建立專案及項目

新增專案

檔案>新增>專案

ASP.NET 空網站

加入新項目

在專案目錄最外層,右鍵>加入>加入新項目 Web表單

簡單練習輸出文字

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<% 
    string mytxt = "Hello World"; 
    HelloWorldLabel.Text = "Hello World2";
%>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <div>
        輸出文字:
        <% Response.Write(mytxt); %> 
        ,也可以這樣寫:
        <%=mytxt %>
    </div>
    <div>
         <asp:Label runat="server" id="HelloWorldLabel"></asp:Label>
    </div>
</body>
</html>

每一個 aspx 檔案都會有對應的 code behind

點選目錄中的 Default.aspx.cs 或者按F7 就能切換

預設這裡面都僅會有基本框架

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        
    }
}

https://www.tutorialspoint.com/asp.net/index.htm

Continue Reading

股票市場 - 選擇權重點介紹

選擇權市場

金管會主管機關 進行監督 期交所 推出投標商品 交易商 負責中介 投資人 負責購買交易

台指選擇權

台指選擇權屬於歐式選擇權

雙方要等到到期日才能履約

價格

買進契約 台指選擇權每 1 點 = 50 元

交易時間

營業日 8:45-13:45

契約類型

市場上可以購買的契約分別有:

近月契約 - 最近這3個月

季月契約 - 最近這2個季

CALL

買進權力 付權利金,就能在到期日依照履約價買進 買方有權履約或毀約

PUT

賣出權力 付權利金,在到期日依照履約價賣出 賣方有權履約或毀約

履約價

當購買了選擇權,依照時間過去,選擇權契約是否賺錢,或虧錢 一般說法可用,價內、價平、價外 來表示

價內

買權 - 一開始購買的履約價低於現市價 賣權 - 一開始購買的履約價高於現市價

價平

買賣權等於現市價

價外

買權 - 一開始購買的履約價高於現市價 賣權 - 一開始購買的履約價低於現市價

權利金

通常買進選擇權,會以XX點權利金買進履約價 XXXX點的Call 通常賣出選擇權,會以XX點權利金賣出履約價 XXXX點的PUT

權利金 例如 150 點

若不履約,就會賠掉 150點 * 50元= 7500元

Continue Reading

MySQL - 取得目前時間、日期,日期加一個月,日期加一年

這裡記錄如何透過MySQL內建的函式來處理時間

非常實用,在處理會員延長有效期限

要延長一個月或一年等狀況,就能透過這些方式,很輕鬆的就將資料處理好。

Continue Reading