在伺服器和客戶之間傳輸資料

來源:互聯網
上載者:User
伺服器|資料


     在本章的開始,已經向大家提供了一張RDS的組件框圖,確定了哪些組件是用戶端的,以及哪些組件是伺服器端的。在上一節,集中介紹了用戶端組件,即資料控制項,因為它們是使用RDS最簡單的方法。它們允許從伺服器向客戶機無縫地傳輸資料,同時也提供了一種在Web頁面上處理資料的簡易方法。為了獲得伺服器上的資料,只需要設定幾個屬性,調用一、兩個方法就足夠了。
    使用資料控制項存在的問題在於它們擷取資料的能力相對有限,即缺乏靈活性。對於RDS資料控制項,必須通過參數,比如Connect i o n和SQL,指定串連和查詢的細節,這把我們限制在資料庫和簡單的查詢上。此外,使用者還能看到這些參數,因此在使用RDS資料控制項時存在一個潛在的安全性漏洞。雖然屬性U R L通過指定實際的資料來源,而不是擷取資料的場所,部分解決了這個問題,但仍然存在著缺陷。使用者依舊可以擷取U R L,直接讀取資料,而這並不是我們所希望的。
    IE 5.0 的引入使訪問X M L資料變得更為容易,因此以後X M L資料肯定會廣泛使用。與RDS資料控制項的U R L屬性一樣,使用者也能直接讀取資料,因為資料來源的名稱對他們是可見的。
    因此,下面一些問題需要考慮。
    ? 需要一種安全的方法檢索伺服器端資料,並在用戶端使用它們。
    ? 需要一種更新資料的方法。
    ? 不損失靈活性。
    這些問題的解決方案是使用組件。組件允許封裝對所有資料的訪問,包括資料來源,確保只在Web頁面上顯示資料。可以隱藏串連的細節,因為它們在組件內部,不會暴露給使用者,所以安全性不會受到損害。也可以建立自己的組件來更新資料,這樣保留了可更新資料的靈
活性。
    此外又增加了安全性,因為在Client Access Server組件之前,需要修改註冊表。這確保只建立所需的組件,阻止使用者上傳組件,然後從伺服器訪問他們。稍後將會看到如何修改註冊表。
10.3.1 基於伺服器的組件
    在這裡並不打算大篇幅地討論如何建立組件,因為本書後面的部分章節已經覆蓋了這些內容,這裡將介紹一些十分簡單的用於伺服器組件的代碼。這有助於說明將要使用的RDS例子。
    首先組件由一個定義串連細節的常數開始,在本例中針對SQL Server和p u b s資料庫。

    然後建立第一個方法,向用戶端Web頁面提供一個記錄集。這是一個標準的Visual Basic函數,返回一個標準的A D O R e c o RDS e t對象。


    這裡有兩個重要的地方需要注意。第一是把C u r s o r L o c a t i o n設為a d U s e C l i e n t,確保使用客戶游標引擎。這對於中斷連線的記錄集是必要的。第二點需要注意是下面這一行代碼:

    把記錄集從伺服器端“斷開”,安全地將記錄集返回給用戶端。
    組件的第二個方法用我們對斷開的記錄集的修改來補救伺服器。它接受一個記錄集參數,重新串連到資料存放區,然後發出U p d a t e B a t c h命令。這將所有批處理修改送到伺服器。

    這就是這個組件的全部內容。很明顯,我們把它簡單化了,這樣才能很快地顯示其包含的內容,但實際上對於能在組件裡放什麼並沒有任何限制。在本書第1 3章到第1 8章會看到更多的有關如何做以及為什麼要這樣做的例子。
10.3.2 DataSpace對象
    D a t a S p a c e對象是負責與伺服器進行通訊的用戶端對象。它的任務是提供一種方法,從用戶端建立伺服器端組件,同時允許在客戶機和伺服器之間傳輸資料。
    雖然聽起來有些複雜,但實際上卻是非常簡單。在Web頁面上建立一個D a t a S p a c e對象,再使用D a t a S p a c e對象建立伺服器端組件。
    建立一個D a t a S p a c e對象有兩種方法。第一種方法使用< OBJECT>標記:

    這與過去建立其他用戶端RDS組件的方法幾乎相同,唯一不同的就是類I D。
    第二種方法是使用指令碼代碼建立D a t a S p a c e對象。下面的代碼顯示了如何用J S c r i p t建立一個D a t a S p a c e對象。

    兩種方法的主要區別在於:使用< OBJECT>標記時, D a t a S p a c e對象只在頁面載入時才建立。使用指令碼技術意味著當指令碼運行時,就建立了D a t a S p a c e對象。如果想延遲物件建立以使頁面載入得快一些,那麼可以使用指令碼技術。
    利用D a t a S p a c e對象建立伺服器組件
    一旦建立了D a t a S p a c e對象,可以使用C r e a t e OBJECT方法建立伺服器端對象。

    P ro g I D是希望建立的對象的I D,Connect i o n是Web伺服器的U R L地址。例如,假設有一個提供p u b s資料庫資料
的Visual Basic組件,如圖1 0 - 1 2所示。

    在這裡,P ro g I D應該是Wr o x P u b s . p u b s。下面以一個完整的例子詳細說明。
    (1) 建立組件和擷取資料
    假定p u b s類有兩個方法, g e t A u t h o r s和s e t A u t h o r s,用於讀取和更新a u t h o r s表。在建立組件之前,先建立一個RDS資料控制項來存放和綁定資料。注意,這裡沒有串連的細節。

    然後可以使用以下用戶端指令碼代碼建立伺服器組件:

    這裡建立了D a t a S p a c e對象的一個執行個體,然後使用C r e a t e OBJECT方法建立伺服器端對象。這裡,指定了對象和Web伺服器的名稱。在本例中將Web伺服器的名字設為l o c a l h o s t,它應該是伺服器的實際名稱。這不是一個安全問題,因為使用者正在與Web網站串連。
    現在,變數o b j P u b s是Wr o x P u b s . p u b s對象的一個執行個體,可以像使用其他對象一樣調用其方法。

    調用g e t A u t h o r s方法返回一個中斷連線的記錄集。現在需要做的就是使用這個記錄集,因此可以使用一個RDS資料控制項(用< OBJECT >標記建立)來存放記錄集並綁定資料。使用資料控制項的SourceRecordset 屬性來接收從組件中擷取的記錄集。

    在這種情形下,資料控制項表現得就像自己在擷取資料一樣,唯一不同的是我們已經從組件中提供了資料。
    (2) 使用組件更新資料
    讀者可能想知道使用伺服器端組件時,如何更新資料?不能使用資料控制項的S u b m i t C h a n g e s方法,因為資料控制項沒有串連的細節,因此不知道資料從哪裡來。既然記錄集是一個標準的中斷連線的記錄集,其資料又是由伺服器組件提供的,那麼組件似乎應該知道資料的來源?是的。因此需要把這個中斷連線的記錄集傳給伺服器組件,它會執行批處理更新。
    為了實現這一點,首先從資料控制項中取出記錄集,然後將其作為參數傳給伺服器對象的方法。

    實際上這相當簡單。
10.3.3 使用伺服器端組件的優點
    那麼伺服器端組件最大的特色是什嗎?看一下它的優點:
    ? 串連細節對使用者不可見,為我們提供了一個更安全的系統。同時,組件也必須被註冊,這又是一道附加的安全限制。
    ? 可以用任何相容C O M的語言來建立組件。在例子中使用Visual Basic的原因是因為V B容易理解,但如果需要也可以使用V C + +或D e l p h i。這允許開發人員使用自己最熟悉的語言。
    ? 建立的組件並只不局限於返回和更新記錄集。可構建大量封裝的商務邏輯作為資料處理的一部分。
    ? 可以在s e t R e c o RDS e t方法中封裝全部衝突處理的代碼,而只返回錯誤的詳細說明。這表明用戶端指令碼是規範的。同時,也意味著使用者無法竊取你精心編寫的代碼。
    本書的下一節會詳細介紹組件的優點。
10.3.4 註冊伺服器端組件
    在前面曾經說過,在Web瀏覽器中建立一個伺服器組件之前必須修改註冊表。為了讓RDS能使用組件,必須將組件的P r o g I D添加到下面的註冊表鍵中:

    警告:在編輯註冊表時始終要很仔細。在修改之前備份註冊表永遠是明智的。
    運行r e g e d i t後,選擇A D C L a u n c h鍵,然後從E d i t菜單中選擇N e w,再選擇K e y。現在為組件輸入P r o g I D,例如圖1 0 - 1 3所示。

    還應該考慮對註冊表做一點修改以標明組件為“ safe for scripting”,這樣在啟動並執行時候,才會完全滿足I E的要求。此時需要增加兩個鍵,兩個都需要組件的G U I D。

    實現的最好方法是使用Visual studio的Package and Deployment Wi z a r d建立一個Internet下載軟體包(Internet Download Package)。如果選擇了Safe for Initialization和Safe for Scripting這兩個選項,那麼當軟體包安裝到伺服器時,將會更新註冊表。如果確實需要得到組件的類I D,那麼這個嚮導也能建立一個HTML檔案,裡面是一個帶有組件類I D的<OBJECT>標記。
10.3.5 自訂處理器
    RDS資料控制項是一個優秀的用戶端工具,可在用戶端處理大量的資料。大多數例子已經表明資料控制項使用的是固定的資料集,比如a u t h o r s表。然而,動態資料綁定的例子表明了也可以讓使用者決定自己想要檢索的資料。這可以通過建立按鈕來實現,可為使用者提供一個文字框來輸入表名,甚至輸入SQL查詢字串。
    當然,這增加了RDS資料控制項的靈活性,但卻是以犧牲安全性為代價的。如果使用者對資料的使用範圍不受限制,他們要麼會覺得混亂,要麼就想偷看那些保密的財務資料。因而我們需要的是一種靈活的,但又受一定限制的檢索資料的方法。
    為了做到這一點可以使用一個處理器,可以在連接字串或命令執行之前修改它們。
    處理器是一個包含四部分內容,分別由斷行符號符分隔的文字檔:
    ? Connect節:確定連接字串。
    ? SQL 節:確定SQL語句和命令。
    ? UserList節:確定使用者。
    ? Logs 節:確定日誌記錄能力。
    該文字檔名預設為M s d f m a p . i n i,安裝在Wi n d o w s預設目錄中。
    1. Connect節
    Connect節允許覆蓋連接字串和訪問細節,由下面兩個條目之一標識:
    ? [connect default] 指出預設的串連細節。
    ? [connect Connect i o n N a m e] 指出名為Connect i o n N a m e的串連的細節。
    在該節有兩對名稱/值,如表1 0 - 6所示。

    例如:

    這表明,如果資料控制項的連接字串為P u b s D a t a b a s e,使用者將以G u e s t U s e r的身份登入到資料庫,並且只有讀的許可權。因此,如果使用者執行以下操作:


    這裡的值覆蓋了Connect節中的存取權限值。
    為了正確使用U s e r L i s t節,伺服器必須能夠驗證使用者,因此這取決於伺服器上的驗證規則。例如,如果使用匿名訪問,那麼所有使用者都會以Web網站中I I S管理屬性所指定的預設使用者身份串連到伺服器。
    4. Logs節
    Logs節允許指定一個寫入錯誤的檔案名稱由[Logs]標識。日誌記錄應用於所有串連。如果此記錄檔不存在則會建立一個新的記錄檔。

    6. 使用自訂處理器
    可以使用RDS資料控制項的Handler屬性來指定處理器,並給指定處理器的名字。預設的處理器是M S D F M A P. Handler,它是RDS伺服器端部分使用的一個組件。也可以編寫自己的自訂處理器(標準的C O M組件),如果這樣做,應該參考RDS的文檔。




相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。