不同瀏覽器之間多年的競爭導致產生了許多工具來幫助開發人員完成以前很難做到的任務。現在,只要一小段腳本,你就可以建立一個應用程式將資料綁定到使用者控件,這樣就可以透過一個內嵌的代理類型的控件與伺服器通訊。
在Internet Explorer(IE)中,這些東西包括XML 資料島和XMLHTTP 對象,XML 資料島用於將資料綁定到表單元素,XMLHTTP 物件用於在目前頁面內不導航到其它頁面的情況下建立對伺服器的同步和異步調用。我將使用這兩個易用的特性來建立一個簡單的聊天應用程序,該應用程式由一些充當UI 的ASP 頁面,實現客戶端功能的JavaScript,和SQL Server 2000 中完成商業邏輯的T-SQL 所組成。
客戶和伺服器使用XML 通訊。在Web 伺服器接收到一個訊息區塊之後,訊息區塊會追加到SQL Server 中的一個帶有時間戳記的MESSAGES 表中。基於預先定義好的時間間隔,客戶會從伺服器請求更新信息,包括自上一次從伺服器請求信息到現在為止追加到資料庫中的消息列表和聯機用戶列表。
客戶將透過XMLHTTP 物件傳送一個到伺服器。動作(action)要不是請求刷新訊息和使用者列表,就是發送一個新訊息。這些動作保存在一個叫做ACTIONS 的表格中。伺服器將回應相應的請求或接受一個新訊息然後追加到MESSAGES 表中。
當伺服器回應一個訊息的請求的時候,會傳回上次請求之後的所有新訊息的一個清單。為了追蹤客戶的活動,我使用一個ACTIVITY 表包含客戶活動的日期時間(datetime),客戶的標誌保存在表HANDLES 中,該表的名字很直觀。
下面是建表的腳本:
所有的資料操作將透過預存程序完成。所有的資料介面將透過一個充當Web 伺服器和SQL Server 2000 的聯絡員的泛型COM 完成。 COM 物件暴露一個我要使用的方法RunSPReturnStream。此方法的第一個參數為預存程序的名字,第二個參數是參數陣列的陣列。參數陣列是一個如下格式的簡單陣列:(paraName, paramType, paramLength, paramValue)。 paramType是ADO Parameter Type 枚舉之一。一個ASP 頁面負責接受動作和建立回應,我把它叫做HandleAction.asp。
聊天頁面將包含一個區域顯示聊天訊息;這個區域是一個包含在DIV 中的TABLE。這個TABLE 被綁定到一個xmlMessages XML 資料島上。另外一個區域顯示目前的使用者;這個區域也是一個包含在DIV 中的TABLE,它被綁定到一個xmlUsers XML資料島上。另外還有一個TEXTAREA 供用戶輸入訊息。