钟秋亭
(鞍山师范学院 图书馆,辽宁 鞍山 114007)
网络技术改变了交流方式,以沟通交流为基础的图书馆信息咨询服务建立了形式多样的服务系统,有外购的专门系统型,有借助免费工具的网络平台型.本文所研究设计的基于网页交流形式的服务系统,搭建了信息交流沟通平台,彰显了图书馆的专业信息咨询服务特色.
本文利用ASP.NET的CallBack机制和改进的WebPart控制组和DataSource控件等技术实现实时互动的信息咨询服务系统,解决了页面不断刷新加载而造成的页面闪烁、停滞等问题,为信息咨询服务提供了顺畅交流的系统平台[1-4].
ASP.NET的Postback和Callback均可以实现对服务器请求页面信息的功能,Postback对服务器请求保存上一次的请求页面状态,而客户端与服务端的交互默认依然是整页面提交,加重了网络数据传输负担,加大了服务器的工作压力,而且用户还需要付出时间等待最终处理结果[2].
ASP.NET在2.0版增加了Callback机制,实现了通过客户端系统网页脚本向服务器端传递相应的信息数据,服务器端以接收到的数据进行查询和处理,最后将结果回传到客户端进行显示.ASP.NET提供了实现无刷新回调接口IcallbackEventHandler,该接口分别定义了RaiseCallbackEvent和GetCallbackResult.通过它们实现接受客户端传递的信息数据,再将所得到的结果传回给客户端的系统页面.Callback减轻了数据传输负担,缓解了服务端的工作压力,并且具有异步性[3].
这个咨询服务系统的主页仅在一个页面通过WebPart和菜单组合机制来实现各项功能,其整体效果如图1所示.
图1是信息咨询系统所有功能全部显示的页面,每部分功能均采用WebPart机制,用户可以根据喜好而取舍任何一个WebPart,或进行位置的改变.
其中“在线咨询”和“交流信息”两个WebPart就是利用CallBack机制,通过自动读取传输数据实现的互动交流功能.而“信息公告”和“待办事务”这些功能是通过非常方便的ASP.NET信息访问机制DataSource完成的.
图1 功能显示页面
除了主页,独立的页面还有登录机制的Login页面,其它的子功能采用WebPart方式整合在系统中,整个系统的各项规划设计如图2所示.
图2 系统规划设计图
咨询系统中的每个功能的WebPart都有自己的文件夹,其中大多都有两个文件,如图2中信息公告文件夹中的两个文件.其中的.ascx文件是功能的WebPart,被存放在主页中,另一个文件是实现各个WebPart的数据添加、整理等功能.
本文设计的系统中每一个WebPart的子功能,都采用数据库处理机制,这些机制使用的是Oracle数据库,在Oracle数据库管理工具P/L SQL Developer中创建4个表,分别为待办事务、交流信息、信息公告、在线咨询.
在Web.config文件中找到节点,在这个节点中添加代码,用于定义Oracle数据库的名称,以及所需要的用户名和密码,具体如下:
在项目App_Code下建一个类,命名为DB.cs,该类主要用于创建数据的连接和操作Oracle数据库.编写代码如下:
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); ...
在这个DB.cs类页面前端拖一个GridView控件,然后在后台查询表中记录,把记录绑定到GridView中.后台部分代码如下:
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();
...
以此实现网页各表单选项对数据库的访问,向服务器提交数据请求获取数据表中的信息并显示在系统页面相应栏目中.
信息咨询系统的使用,首先是登录机制,涉及几个WebPart功能的使用权限问题,未登录的访客只能看到信息公告.在主页上端有一个用户状态字段,显示当前用户名和登录状态,通过登录机制,跳转入系统主页面,并还原WebPart的设置初始值,它是通过控制主页面上的WebPartManager而实现,其中关键代码如下:
Ctype(Me.page.FindControl("WebPartManager1"),WebPartManager).DisplayMode = WebPartManager.BrowseDisplayMode
把用户的WebPart个性化还原初始值,通过如下代码实现:
CType(Me.Page.FindControl("WebPartManager1"),WebPartManager).Personalization.ResetPersonalizationState()
由于此用户数据来自图书馆读者数据库,只需在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控件本身不处理身份验证,此功能由“Membership类”来完成,Membership用“ValidateVser方法”判断账号密码是否正确,确定是否为数据库中的用户,最终完成登录.
在不换页面的前提下实现这个功能,要建立一个发送信息的机制,一个随时检查是否有用户信息的Listener(监听)控件,以及一个存储信息的数据结构.
2.2.1 发送信息机制 这是一个WebPart类型,设置了查询对方是否收到信息的功能,页面上设置了两个按钮分别对应“发送信息”和“显示发送信息记录”两个View控件,具体样式如图3所示.
图3 发送信息样式图
在图3页面中的“内容”中输入所传递的信息,然后点击“发送”按钮,便将信息发送了出去,所谓的“发送”实际是把此信息存入数据库,发送信息功能的实现代码如下:
For i As Integer = 0 To Me.CheckBoxList1.Items.Count-1
If Me.CheckBoxList1.Items(i).Selected = True Then
紧接着的下面代码为关键部分,调用EIP.Message.SendRtMsg发送信息:
If EIP.Message.SendRtMsg(My.User.Name,Me.CheckBoxList1.Items(i).Text,Me.TextBox1.Text) <= 0 Then
上面的EIP.Message.SendRtMsg存储信息到数据库中,此功能实现的代码如下:
db.InsertCommand = "insert into 即时信息 (发信息者,收信息者,发送时间,信息内容) values (?,?,?,?)"
db.InsertParameters.Clear()
db.InsertParameters.Add("发信息者",发信息者)
db.InsertParameters.Add("收信息者",收信息者)
db.InsertParameters.Add("发送时间")My.StudyHost20.Clock.GetNowByYYYYMMDDHHMMSS)
db.InsertParameters.Add("信息内容",信息内容)
Return db.Insert()
利用DataSource控件把数据存储到数据库,主页上的CallBack获取到用户端传入的数据,通过EIP.Message.GetRtMsgForMe控件获取数据库中该用户未读的信息组成字符串,由RetData返回给用户端的程序函数,并显示在用户的页面上,此结果如图4所示.
2.2.2 即时互动咨询交流的实现机制 在线咨询可以实现多人同时交流,包括邀约和互动交流两个功能.
(1)邀约
即时邀约功能,方便用户申请咨询邀约和信息服务者约请用户参加交流.网页上即时出现约请信息,用户或服务者进行相应回应,同时也能看到咨询窗口的最新实时交流信息,免去了换页面的麻烦,该模块见图1中的交流信息,从邀请人员窗口中选中邀约对象,提交邀约信息,这部分操作的主要代码如下:
Shared Sub invite(ByVal Who As String,ByVal UserID As String,Optional ByVal time As String = "")
EIP.Message.SendRtMsg(UserID,Who,UserID & "邀请您参加在线咨询,欢迎加入!")
End Sub
这时,对方一端则出现如图5的显示.
图4 页面显示图
图5 邀约显示图
图6 在线咨询显示图
2.2.3 互动交流的在线咨询服务 在线咨询服务主要包括在线咨询的WebPart和在线咨询的数据表,每位成员的每次发言,会自动存储到数据库中,页面上的CallBack即时地从数据库中读取最近几条发言记录显示在页面上,成为在线咨询中的内容,如图6所示.
用户在内容中输入信息,点击“发言”按钮,则生成一个CallBack操作,将内容和发言者等数据一起传给服务器端,并存储到数据库中,用户端功能实现的部分代码为:
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
服务器端接收数据并存储到数据库中的代码主要如下:
If eventArgument <> ""
Then Dim buf()As String = Split(eventArgument,",")
EIP.OnlineAdvice.InsertMessage(1,buf(0),buf(1))
End If
对数据库的访问操作,是通过DataSource类实现的.程序用SQL语法,“InsertMessage()”函数把发言信息存储到在线咨询数据表,“GetMessage()”函数把在线咨询数据表中的信息,组成HTML代码发送给用户端.其实现代码主要部分如下:
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
如此不需换页操作,便实现了在一个页面上进行发言的同时也能看到其他用户与馆员在线咨询的交流信息.
网络改变生活,也改变交流的方式,更加方便、快捷的交流渠道促进了信息知识快速流动的发展,提高了知识的价值转化[5].信息咨询服务的专业化和便捷化是时代的需求,“工欲善其事必先利其器”,良好的交流工具既有利于通信沟通,也提高了工作效率[6].随着读者对于图书馆信息咨询服务要求的日益增加,为读者提供个性化的信息咨询服务成为图书馆提高自身核心竞争力的途径之一[7].基于ASP.NET网络技术设计的信息咨询服务系统,以页面简洁、交流方便、数据传输快捷的特点,将会提升图书馆信息咨询服务的质量和效率,也充分体现了图书馆服务的专业化特色.