你的位置: Kiyo'Space首页 ASP 阅读文章 欢迎留下您的足迹

5个实用网站速成

[ ASP ] 分享

Transaction功能:「同生共死」的異動(Transaction)功能。

SSL功能:安全傳輸。

Message Queue功能:非同步處理功能。

中文全文檢索功能。

郵件傳送功能。

 

網站如何加入Transaction功能呢?

如何於您的網站加入異動(Transaction)功能呢?

IIS(Internet Information Server)與MTS(Microsoft Transaction Server)緊密整合,資料庫更動可以有「同生共死」的異動(Transaction)功能。

asp程式中所有的資料庫更動都成功時,才算成功;有一個資料庫的更動失敗時,已經更動的資料庫資料將自動恢復(rollback),這就是所謂的異動(Transaction)功能。

譬如從甲帳戶匯款到乙帳戶時,若乙帳戶的資料庫更動失敗時,已經更動甲帳戶的資料庫資料將自動恢復(rollback)。數個資料庫的資料更動,不是「同生」,就是「共死」。

並不是所有資料庫都提供異動(Transaction)的功能,Access沒有提供,SQL Server和Oracle則提供異動(Transaction)的功能。

asp程式中異動(Transaction)功能的有效範圍為一個asp程式,換句話說,這個asp程式中所有的資料庫更動都具有異動(Transaction)功能。

如何於asp程式中告訴IIS要做異動(Transaction)功能的處理呢?

方法為於asp程式碼當中的第一行加入「TRANSACTION=Required」,告訴IIS這一個asp程式使用異動(Transaction)功能的處理方式,asp程式如下:

<%@ TRANSACTION=Required LANGUAGE="VBScript" %>

若此asp程式內所有程式(包括更新數個資料庫)執行成功時,將呼叫OnTransactionCommit()副程式。若執行失敗(包括更新任何一個資料庫失敗)時,將呼叫OnTransactionAbort()副程式。

您可以呼叫SetComplete方法表示執行成功,或呼叫SetAbort方法表示執行失敗。

譬如asp檔案如下:

以下是引用片段:
<%@ TRANSACTION=Required LANGUAGE="VBScript" %>

<% Set obj1 = Server.CreateObject("testobj.cls1") %>

<% = obj1.data3t(1,10) %>

<%

Sub OnTransactionCommit()

… 

end sub

Sub OnTransactionAbort()

end sub

%>

設計有Transaction功能的元件

如何設計有異動(Transaction)功能的元件呢?

方法為ActiveX DLL中使用asp的ObjectContext物件,譬如說於Visual Basic 的ActiveX DLL定義如下:

Dim objContext As ObjectContext

Set objContext = GetObjectContext()

執行成功時,呼叫SetComplete方法,執行失敗時呼叫SetAbort方法以釋放資源。

譬如說於Visual Basic 的ActiveX DLL,其Visual Basic程式碼如下:

以下是引用片段:
Function data3t(input1, points)

On Error GoTo Error1

Dim objContext As ObjectContext

Set objContext = GetObjectContext()

objContext.SetComplete

Exit Function

Error1:

objContext.SetAbort

End Function

網站如何加入SSL安全傳輸功能呢?

如何於您的網站加入SSL(Secure Sockets Layer)安全傳輸功能呢?

網路上的傳輸資料,都可能被攔截、竄改。首先我們先看看,如何將資料安全的傳輸呢?

甚麼是對稱金鑰(Session Key)法、公開金鑰(Public Key)法、SSL(Secure Sockets Layer)呢?

 

對稱金鑰(Session Key)法

最簡單的方法,為傳送者將待傳送的資料使用一把對稱金鑰(Session Key)加密,傳送當中的資料為亂碼,不怕被人攔截,接收者收到資料後使用同一把對稱金鑰(Session Key)解密。

所謂的金鑰(Key)並不是真的是一把鑰匙,而是一個加解密的運算法則,譬如將每一個資料加2,2即為一把金鑰。

對稱金鑰(Session Key)法的問題,為如何於網路上安全地交付這一把加解密的鑰匙?這一把鑰匙於網路上傳送交付,也可能被攔截、竄改。

 

公開金鑰(Public Key)法

於是,有人發明公開金鑰(Public Key)法,傳送者將待傳送的資料使用接收者的公開金鑰(Public Key)加密,傳送當中的資料為亂碼,不怕被人攔截,接收者收到資料後使用另外一把接收者的的私密金鑰(Private Key)解密。

由於公開金鑰(Public Key)不怕知道,因此適合於網路上安全地交付這一把加密用的公開金鑰(Public Key)。

由於對稱金鑰(Session Key)法的運算較複雜,運算速度比對稱金鑰(Session Key)法慢上數千倍。

 

SSL(Secure Sockets Layer)

SSL(Secure Sockets Layer),則融合對稱金鑰(Session Key)法、和公開金鑰(Public Key)法的優點。

瀏覽器會先產生一把對稱金鑰(Session Key),將待傳送的資料使用這一把對稱金鑰(Session Key)加密,再使用接收者的公開金鑰(Public Key)將這一把對稱金鑰(Session Key)加密,傳送當中的資料為亂碼,接收者收到資料後使用另外一把接收者的私密金鑰(Private Key)先將對稱金鑰(Session Key)解密,再使用這一把對稱金鑰(Session Key)將傳送的資料解密。

公開金鑰(Public Key)法的問題,為如何確認這一把加密用接收者的公開金鑰(Public Key)的正確性?這一把接收者的公開金鑰(Public Key)於網路上傳送交付,也可能被攔截、竄改。

因此必須有一個具備公信力的認證中心即所謂的CA(Certificate Authority),對接收者的即網站伺服器來核發一個伺服器認證,以證實這一把加密用接收者的公開金鑰(Public Key)確定為此伺服器所有。

SSL(Secure Sockets Layer),於網路上溝通的流程,如下:

首先瀏覽器發出https:// 的SSL要求。

網站伺服器回應伺服器認證,包括伺服器的公開金鑰(Public Key)、認證中心CA和其數位簽章、效期、序號、使用者,確定為此伺服器所有。

瀏覽器會先產生一把對稱金鑰(Session Key),再使用伺服器的公開金鑰(Public Key)將這一把對稱金鑰(Session Key)加密,伺服器收到後使用另外一把伺服器的私密金鑰(Private Key)先解密出對稱金鑰(Session Key)。

瀏覽器將待傳送的資料使用這一把對稱金鑰(Session Key)加密,伺服器收到資料後,再使用這一把對稱金鑰(Session Key)將傳送的資料解密。

Certificate Server安裝

於Windows NT Option Pack當中,包括Microsoft Certificate Server,提供認證中心CA的功能。對伺服器核發伺服器認證,可以提供SSL安全傳輸的功能。

若要安裝Certificate Server,執行Windows NT Option Pack的安裝程式,選擇 [新增/移除],勾選 [Certificate Server]。

輸入資料庫和記錄的安裝路徑,和認證中心的描述,即可將Certificate Serve安裝好。

申請伺服器認證

前面談到必須有一個具備公信力的認證中心CA,對網站伺服器來核發一個伺服器認證,以證實公開金鑰(Public Key)確定為此伺服器所有。

您可以挑選具公信力的認證中心CA,對網站伺服器來核發一個伺服器認證。也可以使用Windows NT Option Pack的Microsoft Certificate Server,自己成立一個認證中心CA,就可以對伺服器核發伺服器認證,以提供SSL安全傳輸的功能。

登記為「可信任」的CA

安裝好Certificate Server的伺服器認證後,第二個步驟,為於瀏覽器登記認證中心CA為「可信任」的CA,執行 http://localhost/certsrv/ CertEnroll/cacerts.htm,按下 [Certificate for LISA\Actif CA]。

選擇開啟這個檔案,即可將Certificate Server的認證中心CA加到受信任發照者清單中,如。

於瀏覽器的 [Internet選項] 的 [內容] 之 認證 [機構] 中,可以看到已經將Certificate Server的認證中心CA加到受信任機構清單中。

使用SSL(Secure Sockets Layer)

接著即可使用SSL(Secure Sockets Layer)了,將瀏覽器傳送的資料加密,使用https://執行。

ASP程式碼,如下:

以下是引用片段:
<% If UCase(Request.ServerVariables("HTTPS")) = "ON" Then %>

<form action="ssl2.asp" method="GET">

使用者: <INPUT TYPE=TEXT NAME=name1 VALUE=<% =Request("name1") %>><br>

密碼: <INPUT TYPE=TEXT NAME=password1 VALUE=<% =Request("password1") %>>

<input type=submit VALUE="寫完了">

</form>

<hr>

<% else %>

須使用https://

<% end if %>

其中使用UCase(Request.ServerVariables("HTTPS")) = "ON"檢查是否使用https,若未使用則不允許輸入。

網站如何加入Message Queue功能呢?

如何於您的網站加入Message Queue的非同步處理功能呢?

於Windows NT Option Pack當中,包括MSMQ(Microsoft Message Queue Server),提供非「同步」處理的功能。

網路可能緩慢不穩,資料庫也可能當機,MSMQ(Microsoft Message Queue Server)提供了非「同步」處理,可以降低同步的依賴。

不懂?沒關係。

MSMQ的關鍵為「連上線」(online)和「有空」(available)。由於網路上所有的應用程式不一定都能同時100%連上線(online),有的應用程式的電腦可能仍然開機。應用程式即使連上線,也可能沒有空(available)來處理與其他應用程式的連繫工作。

所謂「同步」,譬如當網路上的甲應用程式想要傳送訊息到乙應用程式,必須等待乙應用程式的回應,才能繼續做下去時,這就是須要「同步」。

但是,乙應用程式可能仍未連上線(online),也可能沒有空(available)來處理與甲應用程式的連繫工作。

MSMQ(Microsoft Message Queue Server),提供於分散環境下網路上多個應用程式的容錯功能。將不需要立刻回應的應用程式,以非同步方式來處理。MSMQ將甲應用程式的訊息儲存到MSMQ當中,等乙應用程式連上線也有空時,再來取得甲應用程式儲存於MSMQ的訊息。

因此,MSMQ支援行動運作(Mobile Computing),譬如筆記型電腦於正常狀況並無網路連線,待傳送的訊息可先存放在用戶端筆記型電腦的queue當中,待爾後與網路連線,再上傳到伺服器端。

MSMQ與IIS(Internet Information Server)緊密整合,於Web應用程式中使用asp來控制Message Queue。

MSMQ也與MTS(Microsoft Transaction Server)緊密整合,傳送的訊息可以可以與資料庫的更動一起有「同生共死」的異動(Transaction)功能。

您可以使用asp程式來開發MSMQ的Web應用程式,也可以使用Visual Basic或Visual C++等語言來開發MSMQ的網路應用程式。

傳送Message到MSMQ

如何傳送Message到MSMQ呢?

若要執行MSMQ傳送Message的範例,首先安裝Windows NT Option Pack的Microsoft Message Queue Server,然後於Message Queue的 [檔案總管] ,新增加一個佇列(Queue),名稱為test。

方法為於Message Queue的 [檔案總管] 的電腦上按右鍵,選擇 [開新檔案] 的 [佇列]。

命名佇列名稱為test。

於用戶端使用瀏覽器,瀏覽執行的結果。

於Message Queue的 [檔案總管] ,於佇列test的日誌下可以看到傳送到MSMQ的Message,顯示Message的主旨部份。

於此Message快速按兩下,可以於 [本文] 看到Message的內文部份。

asp程式當中,如何傳送Message到MSMQ呢?

方法為首先使用Server.CreateObject("MSMQ.MSMQQueueInfo")呼叫MSMQ的元件,然後設定以下:

QueueInfo.pathname:設定Message傳送的目的佇列(Queue)的名稱。

就可以使用QueueInfo.Open(2, 0)開啟此佇列。

接著Server.CreateObject("MSMQ.MSMQMessage")呼叫MSMQ的Message元件,然後設定以下Message的內文和主旨部份:

Msg.Label:設定Message的主旨部份。

Msg.body:設定Message的內文部份。

最後下個Msg.Send Queue後,即開始傳送Message到MSMQ 的佇列下。

asp程式如下:

以下是引用片段:
<%

Set QueueInfo = Server.CreateObject("MSMQ.MSMQQueueInfo")

QueueInfo.pathname = ".\test”

Set Queue = QueueInfo.Open(2, 0)

Set Msg = Server.CreateObject("MSMQ.MSMQMessage") 

Msg.body = "這是message body" & now

Msg.Label = "這是message label" & now

Msg.Delivery = 1 

Msg.Send Queue 

Queue.Close

%>

將傳送Message到MSMQ 的test佇列下。

從MSMQ接收Message

如何從MSMQ接收Message呢?

如果您急著從MSMQ接收剛剛傳送的Message,於用戶端使用瀏覽器執行,會遭到拒絕存取的訊息,這是因為未將使用權限設定為 [完全控制] 的緣故。

因此必須先修改設定。於Message Queue的 [檔案總管] ,於佇列test上按右鍵,選擇 [內容],選擇 [安全設定],按下 [使用權限] 按鈕,將 [Everyone]的存取類型設定為 [完全控制]。

接著就可以從MSMQ接收剛剛傳送的Message,於用戶端使用瀏覽器執行。

asp程式當中,如何從MSMQ接收Messag呢?

方法為首先使用Server.CreateObject("MSMQ.MSMQQueueInfo")呼叫MSMQ的元件,然後設定QueueInfo.pathname為待帶接收Message的佇列(Queue)的名稱。

就可以使用Set q = QueueInfo.Open(1,0)開啟此佇列。最後下個q.Receive後,即開始接收Message。由Msg.Label 、Msg.Body可以讀到 Message的內文和主旨部份。

從MSMQ(Microsoft Message Queue Server)接收Message的asp程式如下:

以下是引用片段:
<%

Set QueueInfo = Server.CreateObject("MSMQ.MSMQQueueInfo")

QueueInfo.pathname = ".\test"

Set q = QueueInfo.Open(1,0) 

Set Msg = q.Receive

If Not Msg Is Nothing Then

Response.Write "<BR>接收到訊息LABEL:" & Msg.Label

Response.Write "<BR>接收到訊息LABEL:" & Msg.Body

End If

%>

學會了嗎?

Message Queue加上Transaction功能

前面談到,MSMQ也與MTS(Microsoft Transaction Server)緊密整合,傳送的訊息可以與資料庫更動一起有「同生共死」的異動(Transaction)功能。

當資料庫的更動成功時,再傳送訊息通知其他的應用程式;資料庫的更動失敗時,訊息就不會傳送,這就是所謂的佇列異動(Transactional queue)。

譬如輸入訂單到資料庫時,若資料庫的更動成功時,就會傳送訊息通知庫房出貨,若資料庫的更動失敗時,就不會傳送訊息通知庫房。

asp程式當中,如何Message Queue加上Transaction功能呢?

首先於asp程式第一行加上TRANSACTION=REQUIRED,告訴IIS這一個asp程式使用異動(Transaction)功能的處理方式。

Msg.Delivery = 1設定為可恢復的傳遞方式(Recoverable Delivery)。

若此asp程式內所有程式執行成功時,包括更新數個資料庫和Message Queue的Message的傳送或接收,將呼叫OnTransactionCommit()副程式。若執行失敗時,譬如更新任何一個資料庫失敗,將呼叫OnTransactionAbort()副程式。

Message Queue加上Transaction功能,asp程式如下:

以下是引用片段:
<%@ TRANSACTION=REQUIRED LANGUAGE=VBScript %>

<%Set QueueInfo = Server.CreateObject("MSMQ.MSMQQueueInfo")

QueueInfo.pathname = ".\test"

Set Queue = QueueInfo.Open(2, 0) 

Set Msg = Server.CreateObject("MSMQ.MSMQMessage") 

Msg.body = "這是message body" & now

Msg.Label = "這是message label" & now

Msg.Delivery = 1 ‘Recoverable Delivery 

Msg.Send Queue 

Queue.Close

Sub OnTransactionCommit

End Sub

Sub OnTransactionAbort

… 

End Sub%>

網站如何加入郵件傳送功能呢?

如何於您的網站加入郵件傳送功能呢?

於Windows NT Option Pack當中,包括SMTP Service,提供郵件傳送的功能。因此若要執行郵件傳送的範例,須安裝Windows NT Option Pack的SMTP Service。

如何於asp程式加入SMTP Service郵件傳送功能呢?首先Set mail1 = Server.CreateObject("CDONTS.NewMail")以呼叫SMTP Service的元件,然後設定:

mail1.To = “收件者E-Mail位址"

mail1.From = "寄件者E-Mail位址"

mail1.Subject = "主旨"

mail1.Body = “E-Mail內文”

最後下Mail1.Send即開始傳送郵件。

asp程式,如下:

以下是引用片段:
<%

Set mail1 = Server.CreateObject("CDONTS.NewMail")

mail1.To = "abc@xxx.com"

mail1.From = "jackchou@tpts5.seed.net.tw" 

mail1.Subject = "主旨"

mail1.Body = "E-Mail內文" 

mail1.Send

%>

郵件傳送ok!

最後一行下了Mail1.Send後即開始傳送郵件。

SMTP Service將待傳送郵件先送到到Mailroot的Queue目錄下,然後再傳送出去,若傳不出去則放置於Mailroot的Badmail目錄下。

執行後於Mailroot的Queue目錄下,可以看到此封待傳送的電子郵件。

没有评论

  • (Required)
  • (Required, will not be published)