鐘秋亭
(鞍山師范學(xué)院 圖書館,遼寧 鞍山 114007)
網(wǎng)絡(luò)技術(shù)改變了交流方式,以溝通交流為基礎(chǔ)的圖書館信息咨詢服務(wù)建立了形式多樣的服務(wù)系統(tǒng),有外購的專門系統(tǒng)型,有借助免費(fèi)工具的網(wǎng)絡(luò)平臺(tái)型.本文所研究設(shè)計(jì)的基于網(wǎng)頁交流形式的服務(wù)系統(tǒng),搭建了信息交流溝通平臺(tái),彰顯了圖書館的專業(yè)信息咨詢服務(wù)特色.
本文利用ASP.NET的CallBack機(jī)制和改進(jìn)的WebPart控制組和DataSource控件等技術(shù)實(shí)現(xiàn)實(shí)時(shí)互動(dòng)的信息咨詢服務(wù)系統(tǒng),解決了頁面不斷刷新加載而造成的頁面閃爍、停滯等問題,為信息咨詢服務(wù)提供了順暢交流的系統(tǒng)平臺(tái)[1-4].
ASP.NET的Postback和Callback均可以實(shí)現(xiàn)對(duì)服務(wù)器請(qǐng)求頁面信息的功能,Postback對(duì)服務(wù)器請(qǐng)求保存上一次的請(qǐng)求頁面狀態(tài),而客戶端與服務(wù)端的交互默認(rèn)依然是整頁面提交,加重了網(wǎng)絡(luò)數(shù)據(jù)傳輸負(fù)擔(dān),加大了服務(wù)器的工作壓力,而且用戶還需要付出時(shí)間等待最終處理結(jié)果[2].
ASP.NET在2.0版增加了Callback機(jī)制,實(shí)現(xiàn)了通過客戶端系統(tǒng)網(wǎng)頁腳本向服務(wù)器端傳遞相應(yīng)的信息數(shù)據(jù),服務(wù)器端以接收到的數(shù)據(jù)進(jìn)行查詢和處理,最后將結(jié)果回傳到客戶端進(jìn)行顯示.ASP.NET提供了實(shí)現(xiàn)無刷新回調(diào)接口IcallbackEventHandler,該接口分別定義了RaiseCallbackEvent和GetCallbackResult.通過它們實(shí)現(xiàn)接受客戶端傳遞的信息數(shù)據(jù),再將所得到的結(jié)果傳回給客戶端的系統(tǒng)頁面.Callback減輕了數(shù)據(jù)傳輸負(fù)擔(dān),緩解了服務(wù)端的工作壓力,并且具有異步性[3].
這個(gè)咨詢服務(wù)系統(tǒng)的主頁僅在一個(gè)頁面通過WebPart和菜單組合機(jī)制來實(shí)現(xiàn)各項(xiàng)功能,其整體效果如圖1所示.
圖1是信息咨詢系統(tǒng)所有功能全部顯示的頁面,每部分功能均采用WebPart機(jī)制,用戶可以根據(jù)喜好而取舍任何一個(gè)WebPart,或進(jìn)行位置的改變.
其中“在線咨詢”和“交流信息”兩個(gè)WebPart就是利用CallBack機(jī)制,通過自動(dòng)讀取傳輸數(shù)據(jù)實(shí)現(xiàn)的互動(dòng)交流功能.而“信息公告”和“待辦事務(wù)”這些功能是通過非常方便的ASP.NET信息訪問機(jī)制DataSource完成的.
圖1 功能顯示頁面
除了主頁,獨(dú)立的頁面還有登錄機(jī)制的Login頁面,其它的子功能采用WebPart方式整合在系統(tǒng)中,整個(gè)系統(tǒng)的各項(xiàng)規(guī)劃設(shè)計(jì)如圖2所示.
圖2 系統(tǒng)規(guī)劃設(shè)計(jì)圖
咨詢系統(tǒng)中的每個(gè)功能的WebPart都有自己的文件夾,其中大多都有兩個(gè)文件,如圖2中信息公告文件夾中的兩個(gè)文件.其中的.ascx文件是功能的WebPart,被存放在主頁中,另一個(gè)文件是實(shí)現(xiàn)各個(gè)WebPart的數(shù)據(jù)添加、整理等功能.
本文設(shè)計(jì)的系統(tǒng)中每一個(gè)WebPart的子功能,都采用數(shù)據(jù)庫處理機(jī)制,這些機(jī)制使用的是Oracle數(shù)據(jù)庫,在Oracle數(shù)據(jù)庫管理工具P/L SQL Developer中創(chuàng)建4個(gè)表,分別為待辦事務(wù)、交流信息、信息公告、在線咨詢.
在Web.config文件中找到節(jié)點(diǎn),在這個(gè)節(jié)點(diǎn)中添加代碼,用于定義Oracle數(shù)據(jù)庫的名稱,以及所需要的用戶名和密碼,具體如下:
在項(xiàng)目App_Code下建一個(gè)類,命名為DB.cs,該類主要用于創(chuàng)建數(shù)據(jù)的連接和操作Oracle數(shù)據(jù)庫.編寫代碼如下:
using System;
using System.Data;
...
using System.Data.SqlClient;
using System.Data.OracleClient;
...
OracleConnection con=DB.GetCon();
con.Open();
OracleCommand cmd=new OracleCommand(P_str_cmdtxt,con); ...
在這個(gè)DB.cs類頁面前端拖一個(gè)GridView控件,然后在后臺(tái)查詢表中記錄,把記錄綁定到GridView中.后臺(tái)部分代碼如下:
using System;
using System.Collections.Generic;
...
protected void Page_Load(object sender,EventArgse)
{string sql="select*from WARE_RETAIL_PART";
//string tab name="WARE_RETAIL_PART";
DataSet ds=DB.getDataSet(sql);
GridView1.DataSource=ds.Tables[0].DefaultView;
GridView1.DataBind();
...
以此實(shí)現(xiàn)網(wǎng)頁各表單選項(xiàng)對(duì)數(shù)據(jù)庫的訪問,向服務(wù)器提交數(shù)據(jù)請(qǐng)求獲取數(shù)據(jù)表中的信息并顯示在系統(tǒng)頁面相應(yīng)欄目中.
信息咨詢系統(tǒng)的使用,首先是登錄機(jī)制,涉及幾個(gè)WebPart功能的使用權(quán)限問題,未登錄的訪客只能看到信息公告.在主頁上端有一個(gè)用戶狀態(tài)字段,顯示當(dāng)前用戶名和登錄狀態(tài),通過登錄機(jī)制,跳轉(zhuǎn)入系統(tǒng)主頁面,并還原WebPart的設(shè)置初始值,它是通過控制主頁面上的WebPartManager而實(shí)現(xiàn),其中關(guān)鍵代碼如下:
Ctype(Me.page.FindControl("WebPartManager1"),WebPartManager).DisplayMode = WebPartManager.BrowseDisplayMode
把用戶的WebPart個(gè)性化還原初始值,通過如下代碼實(shí)現(xiàn):
CType(Me.Page.FindControl("WebPartManager1"),WebPartManager).Personalization.ResetPersonalizationState()
由于此用戶數(shù)據(jù)來自圖書館讀者數(shù)據(jù)庫,只需在Login控制的Authenticate中添加如下程序:
Protected Sub Login1_Authenticate(ByVal sender As Object,ByVal e As System.Web.UI.WebControls.AuthenticateEventArgs)
HandlesLogin1.Authenticated=Membership.ValidateUser(Login1.UserName,Login1.Password)
上面程序中,Login控件本身不處理身份驗(yàn)證,此功能由“Membership類”來完成,Membership用“ValidateVser方法”判斷賬號(hào)密碼是否正確,確定是否為數(shù)據(jù)庫中的用戶,最終完成登錄.
在不換頁面的前提下實(shí)現(xiàn)這個(gè)功能,要建立一個(gè)發(fā)送信息的機(jī)制,一個(gè)隨時(shí)檢查是否有用戶信息的Listener(監(jiān)聽)控件,以及一個(gè)存儲(chǔ)信息的數(shù)據(jù)結(jié)構(gòu).
2.2.1 發(fā)送信息機(jī)制 這是一個(gè)WebPart類型,設(shè)置了查詢對(duì)方是否收到信息的功能,頁面上設(shè)置了兩個(gè)按鈕分別對(duì)應(yīng)“發(fā)送信息”和“顯示發(fā)送信息記錄”兩個(gè)View控件,具體樣式如圖3所示.
圖3 發(fā)送信息樣式圖
在圖3頁面中的“內(nèi)容”中輸入所傳遞的信息,然后點(diǎn)擊“發(fā)送”按鈕,便將信息發(fā)送了出去,所謂的“發(fā)送”實(shí)際是把此信息存入數(shù)據(jù)庫,發(fā)送信息功能的實(shí)現(xiàn)代碼如下:
For i As Integer = 0 To Me.CheckBoxList1.Items.Count-1
If Me.CheckBoxList1.Items(i).Selected = True Then
緊接著的下面代碼為關(guān)鍵部分,調(diào)用EIP.Message.SendRtMsg發(fā)送信息:
If EIP.Message.SendRtMsg(My.User.Name,Me.CheckBoxList1.Items(i).Text,Me.TextBox1.Text) <= 0 Then
上面的EIP.Message.SendRtMsg存儲(chǔ)信息到數(shù)據(jù)庫中,此功能實(shí)現(xiàn)的代碼如下:
db.InsertCommand = "insert into 即時(shí)信息 (發(fā)信息者,收信息者,發(fā)送時(shí)間,信息內(nèi)容) values (?,?,?,?)"
db.InsertParameters.Clear()
db.InsertParameters.Add("發(fā)信息者",發(fā)信息者)
db.InsertParameters.Add("收信息者",收信息者)
db.InsertParameters.Add("發(fā)送時(shí)間")My.StudyHost20.Clock.GetNowByYYYYMMDDHHMMSS)
db.InsertParameters.Add("信息內(nèi)容",信息內(nèi)容)
Return db.Insert()
利用DataSource控件把數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫,主頁上的CallBack獲取到用戶端傳入的數(shù)據(jù),通過EIP.Message.GetRtMsgForMe控件獲取數(shù)據(jù)庫中該用戶未讀的信息組成字符串,由RetData返回給用戶端的程序函數(shù),并顯示在用戶的頁面上,此結(jié)果如圖4所示.
2.2.2 即時(shí)互動(dòng)咨詢交流的實(shí)現(xiàn)機(jī)制 在線咨詢可以實(shí)現(xiàn)多人同時(shí)交流,包括邀約和互動(dòng)交流兩個(gè)功能.
(1)邀約
即時(shí)邀約功能,方便用戶申請(qǐng)咨詢邀約和信息服務(wù)者約請(qǐng)用戶參加交流.網(wǎng)頁上即時(shí)出現(xiàn)約請(qǐng)信息,用戶或服務(wù)者進(jìn)行相應(yīng)回應(yīng),同時(shí)也能看到咨詢窗口的最新實(shí)時(shí)交流信息,免去了換頁面的麻煩,該模塊見圖1中的交流信息,從邀請(qǐng)人員窗口中選中邀約對(duì)象,提交邀約信息,這部分操作的主要代碼如下:
Shared Sub invite(ByVal Who As String,ByVal UserID As String,Optional ByVal time As String = "")
EIP.Message.SendRtMsg(UserID,Who,UserID & "邀請(qǐng)您參加在線咨詢,歡迎加入!")
End Sub
這時(shí),對(duì)方一端則出現(xiàn)如圖5的顯示.
圖4 頁面顯示圖
圖5 邀約顯示圖
圖6 在線咨詢顯示圖
2.2.3 互動(dòng)交流的在線咨詢服務(wù) 在線咨詢服務(wù)主要包括在線咨詢的WebPart和在線咨詢的數(shù)據(jù)表,每位成員的每次發(fā)言,會(huì)自動(dòng)存儲(chǔ)到數(shù)據(jù)庫中,頁面上的CallBack即時(shí)地從數(shù)據(jù)庫中讀取最近幾條發(fā)言記錄顯示在頁面上,成為在線咨詢中的內(nèi)容,如圖6所示.
用戶在內(nèi)容中輸入信息,點(diǎn)擊“發(fā)言”按鈕,則生成一個(gè)CallBack操作,將內(nèi)容和發(fā)言者等數(shù)據(jù)一起傳給服務(wù)器端,并存儲(chǔ)到數(shù)據(jù)庫中,用戶端功能實(shí)現(xiàn)的部分代碼為:
Dim SentMsgScript As String =Me.ClientScript.GetCallbackEventReference(Me,"document.all." & Me.txb_msg.ClientID & ".value+'," & My.User.Name & "'","receivedData","document.all." & Me.Panel1.ClientID)
Me.btn_Send.Attributes("onclick") = SentMsgScript
服務(wù)器端接收數(shù)據(jù)并存儲(chǔ)到數(shù)據(jù)庫中的代碼主要如下:
If eventArgument <> ""
Then Dim buf()As String = Split(eventArgument,",")
EIP.OnlineAdvice.InsertMessage(1,buf(0),buf(1))
End If
對(duì)數(shù)據(jù)庫的訪問操作,是通過DataSource類實(shí)現(xiàn)的.程序用SQL語法,“InsertMessage()”函數(shù)把發(fā)言信息存儲(chǔ)到在線咨詢數(shù)據(jù)表,“GetMessage()”函數(shù)把在線咨詢數(shù)據(jù)表中的信息,組成HTML代碼發(fā)送給用戶端.其實(shí)現(xiàn)代碼主要部分如下:
Shared Sub InsertMessage(ByVal OnlineAdviceNO As String,ByVal Message As String,ByVal UserID As String)
...
Shared Function GetMessage(ByVal OnlineAdviceNO As String,ByVal LastN As Integer)
Dim db As New SysDB
If LastN <= 0 Then LastN = 15
如此不需換頁操作,便實(shí)現(xiàn)了在一個(gè)頁面上進(jìn)行發(fā)言的同時(shí)也能看到其他用戶與館員在線咨詢的交流信息.
網(wǎng)絡(luò)改變生活,也改變交流的方式,更加方便、快捷的交流渠道促進(jìn)了信息知識(shí)快速流動(dòng)的發(fā)展,提高了知識(shí)的價(jià)值轉(zhuǎn)化[5].信息咨詢服務(wù)的專業(yè)化和便捷化是時(shí)代的需求,“工欲善其事必先利其器”,良好的交流工具既有利于通信溝通,也提高了工作效率[6].隨著讀者對(duì)于圖書館信息咨詢服務(wù)要求的日益增加,為讀者提供個(gè)性化的信息咨詢服務(wù)成為圖書館提高自身核心競爭力的途徑之一[7].基于ASP.NET網(wǎng)絡(luò)技術(shù)設(shè)計(jì)的信息咨詢服務(wù)系統(tǒng),以頁面簡潔、交流方便、數(shù)據(jù)傳輸快捷的特點(diǎn),將會(huì)提升圖書館信息咨詢服務(wù)的質(zhì)量和效率,也充分體現(xiàn)了圖書館服務(wù)的專業(yè)化特色.