<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    鷹翔宇空

    學(xué)習(xí)和生活

    BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
      110 Posts :: 141 Stories :: 315 Comments :: 1 Trackbacks
    原文引自:http://www.microsoft.com/china/msdn/library/architecture/architecture/architecturetopic/SCArchDeGuide/Chapter1Introduction.mspx

    使用 Offline Application Block 進(jìn)行開(kāi)發(fā)

    發(fā)布日期: 8/19/2004 | 更新日期: 8/19/2004

    Microsoft Corporation

    內(nèi)容:第 3 章詳細(xì)說(shuō)明了構(gòu)建和使用該應(yīng)用程序塊的過(guò)程。本章還提供了快速入門(mén),以幫助您了解實(shí)現(xiàn)自己的脫機(jī)解決方案所需的步驟。

    *
    本頁(yè)內(nèi)容
    安裝 Offline Application Block 安裝 Offline Application Block
    Offline Application Block 快速入門(mén) Offline Application Block 快速入門(mén)
    使用 Offline Application Block 使用 Offline Application Block
    開(kāi)發(fā)自己的提供程序 開(kāi)發(fā)自己的提供程序
    小結(jié) 小結(jié)
    更多信息 更多信息

    現(xiàn)在您已經(jīng)了解了 Offline Application Block 的設(shè)計(jì),接下來(lái)就可以使用該應(yīng)用程序塊開(kāi)發(fā)解決方案了。要開(kāi)發(fā)使用 Offline Application Block 的應(yīng)用程序,您需要:

    ?

    了解如何構(gòu)建(編譯)該應(yīng)用程序塊。

    ?

    查看快速入門(mén)以學(xué)習(xí)如何使用該應(yīng)用程序塊。

    本章為您說(shuō)明了如何使用 Offline Application Block 以及與該應(yīng)用程序塊隨附的不同子系統(tǒng)相關(guān)聯(lián)的提供程序,來(lái)開(kāi)發(fā)解決方案。本章還討論了設(shè)計(jì)注意事項(xiàng)以及如何開(kāi)發(fā)自己的提供程序。本章使用連接檢測(cè)提供程序(由該應(yīng)用程序塊提供)作為參考示例。

    安裝 Offline Application Block

    在安裝 Offline Application Block 之前,查看軟件要求和該應(yīng)用程序塊構(gòu)建的文件夾結(jié)構(gòu)非常重要。

    軟件要求

    要使用 Offline Application Block,您必須確保系統(tǒng)符合下列最低軟件要求:

    ?

    Microsoft_ Windows_ XP 操作系統(tǒng)

    ?

    Microsoft .NET framework 1.1 版

    ?

    Microsoft Visual Studio_ .NET 2003 開(kāi)發(fā)系統(tǒng)(企業(yè)級(jí)結(jié)構(gòu)設(shè)計(jì)版、企業(yè)級(jí)開(kāi)發(fā)版或 .NET 專(zhuān)業(yè)版)

    此外,您可能需要安裝 Microsoft Internet 信息服務(wù) (IIS),這取決于應(yīng)用程序的目的,或是您是否打算安裝 InsuranceClaimsService Web 服務(wù),以便在同一計(jì)算機(jī)上運(yùn)行 InsuranceClaimsQuickStart\InsuranceClaimsClient

    該應(yīng)用程序塊具有用于“隊(duì)列存儲(chǔ)”的內(nèi)置提供程序。這些提供程序使用:

    ?

    Microsoft SQL Server 桌面引擎(也稱(chēng)為 MSDE 2000)。有關(guān)安裝信息,請(qǐng)參閱 Microsoft 知識(shí)庫(kù) (http://support.Microsoft.com/default.aspx?scid=KB;EN-US;Q324998) 中的文章 Q324998。

    ?

    Microsoft 消息隊(duì)列 (MSMQ)。有關(guān)安裝信息,請(qǐng)參閱 Microsoft 知識(shí)庫(kù) (http://support.Microsoft.com/default.aspx?scid=kb;en-us;256096) 中的文章 Q256096。

    除其他提供程序之外,該應(yīng)用程序塊還具有用于緩存的內(nèi)置提供程序。

    有關(guān)相應(yīng)隊(duì)列和緩存提供程序的配置詳細(xì)信息,請(qǐng)參閱本章結(jié)尾的“設(shè)置桌面引擎和 MSMQ”部分。

    構(gòu)建 Offline Application Block

    您必須先構(gòu)建解決方案,然后添加對(duì)幾個(gè)程序集的引用,之后才能使用 Offline Application Block。

    構(gòu)建 Offline Application Block

    1.

    在 Visual Studio .NET 2003 中打開(kāi) Offline.sln 解決方案(位于 <installation location>\Offline\ 文件夾中)。此外,您還可以按以下方式訪(fǎng)問(wèn) Offline Application Block:依次單擊 StartAll ProgramsMicrosoft Application Blocks for .NETOffline,然后單擊 OfflineApplication Block

    2.

    構(gòu)建解決方案以生成下列程序集:

    ?

    Microsoft.ApplicationBlocks.SmartClient.Offline.dll

    ?

    Microsoft.ApplicationBlocks.SmartClient.Offline.Providers.dll

    ?

    MemoryMappedFileStream.dll

    ?

    Microsoft.ApplicationBlocks.Cache.dll

    ?

    Microsoft.ApplicationBlocks.Common.dll

    ?

    Microsoft.ApplicationBlocks.Data.dll

    ?

    Microsoft.ApplicationBlocks.ExceptionManagement.dll

    ?

    Microsoft.ApplicationBlocks.ExceptionManagement.Interfaces.dll

    要在應(yīng)用程序中使用 Offline Application Block,您需要添加一個(gè)對(duì) Common、Offline Providers 和 Offline 程序集的引用。如果您使用的是 Visual C#,請(qǐng)將 using 指令添加到要訪(fǎng)問(wèn)塊代碼的文件中。如果您使用的是 Visual Basic .NET,請(qǐng)將 Imports 指令添加到您要在其中訪(fǎng)問(wèn)塊代碼的文件中。例如,如果您使用 Visual C# 編寫(xiě)一個(gè)新的服務(wù)代理,請(qǐng)將以下 using 指令添加到要訪(fǎng)問(wèn)塊代碼的文件中:

    ...
    using Microsoft.ApplicationBlocks.SmartClient.Offline;
    ...
      
    

    在 Visual Basic 中使用的相應(yīng) Imports 指令是:

    ...
    Imports Microsoft.ApplicationBlocks.SmartClient.Offline
    ...
      
    

    Offline Application Block 文件夾結(jié)構(gòu)

    當(dāng)您安裝 Offline Application Block 時(shí),安裝程序包將創(chuàng)建以下文件夾結(jié)構(gòu):

    <Install Location>
    +---Offline
        +---Caching
        :   +---src
        :       +---cs
        :           +---Cache
        :           :   +---DataProtectionImplementations
        :           :   +---ExpirationsImplementations
        :           :   +---ScavengingImplementations
        :           :   +---StorageImplementations
        :           +---MemoryMappedFile
        +---Common
        :   +---src
        :       +---cs
        :           +---Common
        :           :   +---Crypto
        :           :   :   +---doc
        :           :   +---doc
        :           +---Version
        +---DAAB
        :   +---src
        :       +---cs
        :           +---Microsoft.ApplicationBlocks.Data
        +---Database
        :   +---Cache
        :   +---Queue
        +---Docs
        +---EMAB
        :   +---src
        :       +---cs
        :           +---Microsoft.ApplicationBlocks.ExceptionManagement
        :           +---Microsoft.ApplicationBlocks.ExceptionManagement.Interfaces
        +---QuickStarts
        :   +---src
        :   :   +---cs
        :   :   :   +---ConnectionManagementQuickStart
        :   :   :   +---DownloadQuickStart
        :   :   :   +---InsuranceClaimsQuickStart
        :   :   :   :   +---Database
        :   :   :   :   +---InsuranceClaimsClient
        :   :   :   :   +---InsuranceClaimsService
        :   :   :   +---UploadQuickStart
        :   :   +---vb
        :   :       +---ConnectionManagementQuickStart
        :   :       +---DownloadQuickStart
        :   :       +---InsuranceClaimsQuickStart
        :   :       :   +---Database
        :   :       :   +---InsuranceClaimsClient
        :   :       :   +---InsuranceClaimsService
        :   :       +---UploadQuickStart
        :   +---Utility
        :       +---ValidationKeyGeneration
        +---src
            +---cs
                +---Offline
                :   +---Builders
                :   +---ConnectionManagement
                :   +---DataLoadingManagement
                :   +---Executor
                :   +---QueueManagement
                :   +---ReferenceDataManagement
                :   +---ServiceAgentManagement
                +---Offline Providers
                :   +---CacheStorageProviders
                :   +---ConnectionDetectionStrategies
                :   +---QueueStorageProviders
                +---Versioning
    

    每個(gè)快速入門(mén)解決方案都構(gòu)建在各自的子文件夾中。表 3.1 說(shuō)明了在安裝 Offline Application Block 時(shí)安裝程序包所創(chuàng)建的文件夾。

    3.1:Offline Application Block 安裝程序包創(chuàng)建的文件夾

    文件夾 說(shuō)明

    <installation location>

    安裝 Offline Application Block 的文件夾。默認(rèn)安裝文件夾是: C:\Program Files\Microsoft Application Blocks for .NET\SmartClient Offline Application Block\

    Bin

    存儲(chǔ)在為該應(yīng)用程序塊生成源代碼時(shí)所生成的所有二進(jìn)制文件。該文件夾包含 Debug 或 Release 文件夾,它們包含二進(jìn)制文件。

    Docs

    包含與該應(yīng)用程序塊有關(guān)的文檔,其中包括編譯的幫助 (.chm) 文件。

    Database

    包含設(shè)置“桌面引擎”數(shù)據(jù)庫(kù)(該數(shù)據(jù)庫(kù)由“桌面引擎”隊(duì)列和緩存存儲(chǔ)提供程序使用)所需的數(shù)據(jù)庫(kù)腳本。

    QuickStarts

    包含所有快速入門(mén)。對(duì)于 Microsoft Visual C#_ 開(kāi)發(fā)工具和 Microsoft Visual Basic_ .NET 開(kāi)發(fā)系統(tǒng),每個(gè)快速入門(mén)都有不同的版本。快速入門(mén)是獨(dú)立的文檔,并包含相關(guān)的解決方案文件。在構(gòu)建快速入門(mén)時(shí),系統(tǒng)會(huì)在 QuickStart 文件夾下創(chuàng)建一個(gè) bin 文件夾。bin 文件夾包含存有二進(jìn)制文件的 Debug 文件夾或 Release 文件夾。每個(gè)快速入門(mén)都有一個(gè)獨(dú)立的 bin 文件夾。

    Src

    包含 Offline Application Block 的源代碼。src 文件夾包含下列文件夾:

    Offline – 包含對(duì)于 Offline Application Block 非常重要的代碼。

    Providers – 包含特定于該應(yīng)用程序塊所提供的提供程序的源代碼。

    返回頁(yè)首返回頁(yè)首

    Offline Application Block 快速入門(mén)

    要將脫機(jī)功能添加到應(yīng)用程序中,請(qǐng)先查看該應(yīng)用程序塊隨附的四個(gè)快速入門(mén):

    ?

    連接管理快速入門(mén)說(shuō)明如何使用該應(yīng)用程序塊的“連接狀態(tài)管理”子系統(tǒng)組件,來(lái)檢測(cè)應(yīng)用程序是處于聯(lián)機(jī)狀態(tài)還是脫機(jī)狀態(tài),以及強(qiáng)制系統(tǒng)脫機(jī)或聯(lián)機(jī)。

    ?

    下載快速入門(mén)說(shuō)明如何下載參考數(shù)據(jù),這樣即使在應(yīng)用程序脫機(jī)時(shí)用戶(hù)也可以繼續(xù)使用應(yīng)用程序。該快速入門(mén)使用 OnlineProxy 類(lèi)從一個(gè)虛擬服務(wù)(為進(jìn)行說(shuō)明而使用的本地方法調(diào)用)檢索數(shù)據(jù),并使用“參考數(shù)據(jù)管理”子系統(tǒng)將該數(shù)據(jù)存儲(chǔ)在“參考數(shù)據(jù)緩存”中。

    ?

    上載快速入門(mén)說(shuō)明當(dāng)應(yīng)用程序的用戶(hù)在客戶(hù)端上更新某些信息后,如何將數(shù)據(jù)上載到服務(wù)器。該快速入門(mén)說(shuō)明了如何使用該應(yīng)用程序塊的“消息數(shù)據(jù)管理”子系統(tǒng)。在處理這些消息之前,使用隊(duì)列來(lái)存儲(chǔ)它們。

    ?

    保險(xiǎn)理賠快速入門(mén)說(shuō)明了一個(gè)使用 Web 服務(wù)的端到端應(yīng)用程序。它是最高級(jí)的快速入門(mén),說(shuō)明了如何將該應(yīng)用程序塊用于與 Web 服務(wù)進(jìn)行交互的應(yīng)用程序。該快速入門(mén)隨附的腳本可以創(chuàng)建和刪除 IIS 中的虛擬目錄。該快速入門(mén)包含一個(gè)使用該應(yīng)用程序塊所有子系統(tǒng)的智能客戶(hù)端應(yīng)用程序。這些子系統(tǒng)包括:服務(wù)代理管理、連接狀態(tài)管理、消息數(shù)據(jù)管理和參考數(shù)據(jù)管理。它還演示了對(duì)該應(yīng)用程序塊所引發(fā)的異常的基本錯(cuò)誤處理。

    您可以使用這些快速入門(mén)來(lái)更好地理解 Offline Application Block、開(kāi)發(fā)新的提供程序或修改現(xiàn)有的提供程序。例如,您可能要為連接檢測(cè)功能開(kāi)發(fā)幾個(gè)提供程序,但在配置文件中只啟用所需的提供程序。

    要點(diǎn) 這些快速入門(mén)旨在幫助您理解該應(yīng)用程序塊;它們不是現(xiàn)成的產(chǎn)品代碼示例。

    下面的段落將在開(kāi)發(fā)人員要在應(yīng)用程序中執(zhí)行的任務(wù)的上下文中討論每個(gè)快速入門(mén)。

    管理應(yīng)用程序的連接狀態(tài)

    “連接管理快速入門(mén)”說(shuō)明如何使用該應(yīng)用程序塊的“連接狀態(tài)管理”子系統(tǒng)組件,來(lái)檢測(cè)應(yīng)用程序是處于聯(lián)機(jī)狀態(tài)還是脫機(jī)狀態(tài),以及強(qiáng)制改變應(yīng)用程序的狀態(tài)。

    該快速入門(mén)的單屏幕中包含兩個(gè)按鈕 — Go OfflineGo Online,可讓用戶(hù)將應(yīng)用程序的狀態(tài)更改為聯(lián)機(jī)或脫機(jī)。該屏幕還有一個(gè)標(biāo)簽,用來(lái)顯示應(yīng)用程序的連接狀態(tài)。

    當(dāng)該快速入門(mén)運(yùn)行時(shí),應(yīng)用程序塊開(kāi)始在后臺(tái)輪詢(xún)連接,以自動(dòng)檢測(cè)連接狀態(tài)更改。如果連接狀態(tài)隨后被強(qiáng)制為脫機(jī),則輪詢(xún)會(huì)立即停止。該快速入門(mén)注冊(cè)了 ConnectionManager 類(lèi)的 ConnectionStateChangedEvent。注冊(cè)該事件可讓快速入門(mén)對(duì)連接狀態(tài)的更改做出反應(yīng)。當(dāng)連接狀態(tài)更改時(shí),會(huì)引發(fā)該事件,并且屏幕上的連接狀態(tài)標(biāo)簽會(huì)發(fā)生更改,以反映應(yīng)用程序的連接狀態(tài)。

    構(gòu)建連接管理快速入門(mén)

    1.

    在 Visual Studio .NET 2003 中打開(kāi) ConnectionManagementQuickStart.sln 解決方案(位于 <installation location>\Offline\QuickStarts\src\<language>\ConnectionManagementQuickStart\ 文件夾中)。此外,您還可以按以下方式訪(fǎng)問(wèn)“連接管理快速入門(mén)”:依次單擊 StartAll ProgramsMicrosoftApplicationBlocks for .NETOfflineQuickStartSamples (C#) / (VB),然后單擊 ConnectionManagementQuickStart

    2.

    構(gòu)建解決方案。這將在 <installation location>\Offline\QuickStarts\src\<language>\ConnectionManagementQuickStart\ 文件夾下的 bin\<build configuration> 文件夾中生成 ConnectionManagementQuickstart.exe 程序集。

    要啟動(dòng)該快速入門(mén),請(qǐng)雙擊 ConnectionManagerQuickStart.exe

    “連接管理快速入門(mén)”文件

    這些快速入門(mén)文件位于 <installation location>\Offline\QuickStarts\src\<language>\ConnectionManagementQuickStart\ 文件夾中。表 3.2 說(shuō)明了與該“連接管理快速入門(mén)”討論相關(guān)的文件。

    3.2:“連接管理快速入門(mén)”文件

    文件 說(shuō)明

    App.config

    指定應(yīng)用程序的配置信息。

    ConnectionManagementForm.cs \ .vb

    對(duì)應(yīng)于應(yīng)用程序的視圖 (UI)。

    ConnectionManagementQuickStart.sln

    “連接管理快速入門(mén)”的解決方案文件。

    Controller.cs \ .vb

    管理 UI 與連接管理器和服務(wù)代理之間的交互。它還注冊(cè)了連接狀態(tài)更改事件,并通過(guò)將更改傳遞到關(guān)聯(lián)視圖的方式來(lái)響應(yīng)更改。

    詳細(xì)信息

    該快速入門(mén)使用了該應(yīng)用程序塊隨附的默認(rèn)連接檢測(cè)提供程序(策略)。該默認(rèn)連接檢測(cè)提供程序使用 WinInet 動(dòng)態(tài)鏈接庫(kù) (DLL) 的 InternetGetConnectedState 方法來(lái)檢測(cè)連接狀態(tài)更改。例如,如果在運(yùn)行該示例時(shí),將網(wǎng)絡(luò)電纜從連接到網(wǎng)絡(luò)的計(jì)算機(jī)中拔出,則連接狀態(tài)將顯示更改為脫機(jī)模式。

    檢測(cè)連接的提供程序是在應(yīng)用程序配置文件中指定的。有關(guān)在配置文件中指定提供程序的詳細(xì)信息,請(qǐng)參閱第 4 章“Offline Application Block 配置和安全注意事項(xiàng)”。

    傳輸中的數(shù)據(jù):下載

    “下載快速入門(mén)”說(shuō)明如何下載參考數(shù)據(jù),以便應(yīng)用程序的用戶(hù)即使在應(yīng)用程序脫機(jī)時(shí)也可以繼續(xù)使用該應(yīng)用程序。

    該快速入門(mén)的單屏幕中包含一個(gè) Download 按鈕和一個(gè)用來(lái)顯示結(jié)果的網(wǎng)格。當(dāng)用戶(hù)單擊 Download 按鈕時(shí),數(shù)據(jù)開(kāi)始下載(從本地的 XML 文件讀取)并顯示在網(wǎng)絡(luò)中。

    構(gòu)建下載快速入門(mén)

    1.

    在 Visual Studio .NET 2003 中打開(kāi) DownloadQuickStart.sln 解決方案(位于 <installation location>\Offline\QuickStarts\src\<language>\DownloadQuickStart\ 文件夾中)。此外,您還可以按以下方式訪(fǎng)問(wèn)“下載快速入門(mén)”:依次單擊 StartAll ProgramsMicrosoftApplication Blocks for .NETOfflineQuick Start Samples (C#) / (VB),然后單擊 DownloadQuickStart

    2.

    構(gòu)建解決方案。這將在 <installation location>\Offline\QuickStarts\src\<language>\DownloadQuickStart\ 文件夾下的 bin\<build configuration> 文件夾中生成 DownloadQuickstart.exe 程序集。

    要啟動(dòng)該快速入門(mén),請(qǐng)雙擊 DownloadQuickStart.exe

    “下載快速入門(mén)”文件

    這些快速入門(mén)文件位于 <installation location>\Offline\QuickStarts\src\<language>\DownloadQuickStart\ 文件夾中。表 3.3 說(shuō)明了與該“下載快速入門(mén)”討論相關(guān)的文件。

    3.3:“下載快速入門(mén)”文件

    文件 說(shuō)明

    App.config

    指定應(yīng)用程序的配置信息。

    DownloadQuickStartForm.cs \ .vb

    對(duì)應(yīng)于應(yīng)用程序的視圖 (UI)。

    DownloadQuickStart.sln

    “下載快速入門(mén)”的解決方案文件。

    Controller.cs \ .vb

    管理 UI 與連接管理器和服務(wù)代理之間的交互。它可以注冊(cè)連接狀態(tài)更改事件、創(chuàng)建 DownloadDataServiceAgent 并使用其進(jìn)行注冊(cè)、啟動(dòng)下載,以及在數(shù)據(jù)可用時(shí)使用結(jié)果來(lái)更新視圖。

    DownloadDataServiceAgent.cs \ .vb

    為用于下載工作項(xiàng)目的 OnlineProxy 和服務(wù)代理填充必要的上下文信息。它通過(guò)調(diào)用 DataLoaderManager 來(lái)啟動(dòng)下載工作項(xiàng)目,并將結(jié)果返回到控制器。

    OnlineProxy.cs \ .vb

    與遠(yuǎn)程服務(wù)進(jìn)行交互;在這種情況下,它是用于下載數(shù)據(jù)的本地文件。

    DataSimulator.xml

    存儲(chǔ)聯(lián)機(jī)代理用于返回?cái)?shù)據(jù)的虛擬數(shù)據(jù)。

    詳細(xì)信息

    該快速入門(mén)使用服務(wù)代理(DownloadDataServiceAgent)來(lái)啟動(dòng)下載。DownloadDataServiceAgent 負(fù)責(zé)使用必要的上下文信息創(chuàng)建正確的 ReferenceDataDefinition,例如使用 OnlineProxyContext 創(chuàng)建 OnlineProxy 類(lèi)以便從虛擬服務(wù)(為進(jìn)行說(shuō)明而使用的一個(gè)本地方法調(diào)用)中檢索數(shù)據(jù),以及使用 ServiceAgentContext 將結(jié)果返回到控制器。該服務(wù)代理調(diào)用 DataLoaderManager 來(lái)啟動(dòng)下載具有正確 ReferenceDataDefinition 值的參考數(shù)據(jù)。

    OnlineProxy 負(fù)責(zé)檢索數(shù)據(jù),然后使用“參考數(shù)據(jù)管理”子系統(tǒng)將該數(shù)據(jù)存儲(chǔ)在“參考數(shù)據(jù)緩存”中。

    默認(rèn)情況下,該快速入門(mén)使用 InMemoryQueueStorageProvider 來(lái)緩存數(shù)據(jù)。用于緩存的提供程序是在應(yīng)用程序的配置文件中指定的。有關(guān)如何在配置文件中指定提供程序的詳細(xì)信息,請(qǐng)參閱第 4 章“Offline Application Block 配置和安全注意事項(xiàng)”。

    傳輸中的數(shù)據(jù):上載

    “上載快速入門(mén)”說(shuō)明如何將應(yīng)用程序用戶(hù)修改后的數(shù)據(jù)上載到服務(wù)器。該快速入門(mén)說(shuō)明了如何使用該應(yīng)用程序塊的“消息數(shù)據(jù)管理”子系統(tǒng)。

    該快速入門(mén)的基本窗體包含幾個(gè)字段、一個(gè) Save 按鈕和一個(gè) Cancel 按鈕。當(dāng)該快速入門(mén)啟動(dòng)時(shí),它會(huì)讀取包含數(shù)據(jù)的本地 XML 文件,并在窗體中顯示數(shù)據(jù)。當(dāng)用戶(hù)修改數(shù)據(jù)并單擊 Save 按鈕后,該數(shù)據(jù)會(huì)保存到本地 XML 文件中。這模擬了使用與遠(yuǎn)程服務(wù)進(jìn)行通信時(shí)所必需的所有組件。

    構(gòu)建上載快速入門(mén)

    1.

    在 Visual Studio .NET 2003 中打開(kāi) UploadQuickStart.sln 解決方案(位于 <installation location>\Offline\QuickStarts\src\<language>\UploadQuickStart\ 文件夾中)。此外,您還可以按以下方式訪(fǎng)問(wèn)“上載快速入門(mén)”:依次單擊 StartAll ProgramsMicrosoft Application Blocks for .NETOfflineQuick Start Samples (C#) / (VB),然后單擊 Upload Quick Start

    2.

    構(gòu)建解決方案。這將在 <installation location>\Offline\QuickStarts\src\<language>\UploadQuickStart\ 文件夾下的 bin\<build configuration> 文件夾中生成 UploadQuickstart.exe 程序集。

    要啟動(dòng)該快速入門(mén),請(qǐng)雙擊 UploadQuickStart.exe

    “上載快速入門(mén)”文件

    該快速入門(mén)文件位于 <installation location>\Offline\QuickStarts\src\<language>\UploadQuickStart\ 文件夾中。表 3.4 說(shuō)明了與該“上載快速入門(mén)”討論相關(guān)的文件。

    3.4:“上載快速入門(mén)”文件

    文件 說(shuō)明

    App.config

    指定應(yīng)用程序的配置信息。

    UploadQuickStartForm.cs \ .vb

    對(duì)應(yīng)于應(yīng)用程序的視圖 (UI)。

    UploadQuickStart.sln

    “上載快速入門(mén)”的解決方案文件。

    Controller.cs \ .vb

    管理 UI 與連接管理器和服務(wù)代理之間的交互。它可以注冊(cè)連接狀態(tài)更改事件、創(chuàng)建 UploadDataServiceAgent 并使用其進(jìn)行注冊(cè),以及啟動(dòng)上載。

    UploadDataServiceAgent.cs \ .vb

    創(chuàng)建 Payload 并為用于上載工作項(xiàng)目的 OnlineProxy 和服務(wù)代理填充必要的上下文信息。它通過(guò)調(diào)用 QueueManager 來(lái)啟動(dòng)上載工作項(xiàng)目信息,并將結(jié)果返回到控制器(如果需要)。

    OnlineProxy.cs \ .vb

    與遠(yuǎn)程服務(wù)進(jìn)行交互。在這種情況下,它是用于上載數(shù)據(jù)的本地文件。

    DataSimulator.xml

    存儲(chǔ)由聯(lián)機(jī)代理使用的虛擬數(shù)據(jù)。

    詳細(xì)信息

    該快速入門(mén)說(shuō)明了“消息數(shù)據(jù)管理”子系統(tǒng)是如何工作的。當(dāng)該快速入門(mén)啟動(dòng)時(shí),它從本地 XML 文件中讀取數(shù)據(jù),并將數(shù)據(jù)顯示在窗體中。在用戶(hù)修改數(shù)據(jù)后單擊 Save 按鈕時(shí),控制器將調(diào)用 UploadDataServiceAgent 對(duì)象的 UpdateWorkItem 方法。

    UploadDataServiceAgent 對(duì)象可創(chuàng)建處理請(qǐng)求和提供必要上下文信息(例如 OnlineProxyContextServiceAgentContext 對(duì)象)所需的 Payload 對(duì)象。

    創(chuàng)建 payload 后,UploadDataServiceAgent 對(duì)象會(huì)將它存儲(chǔ)在隊(duì)列中。Executor 對(duì)象從隊(duì)列中提取 payload,然后調(diào)用 OnlineProxy 對(duì)象來(lái)處理請(qǐng)求。

    OnlineProxy 對(duì)象將更新本地 XML 文件中的數(shù)據(jù)。它還可以將該信息傳達(dá)到某個(gè)服務(wù)。它使用 ServiceAgentContext 對(duì)象將結(jié)果返回到控制器。

    默認(rèn)情況下,該快速入門(mén)使用 InMemoryQueueStorageProvider 來(lái)排隊(duì)消息。用于排隊(duì)的提供程序是在應(yīng)用程序的配置文件中指定的。有關(guān)如何在配置文件中指定提供程序的詳細(xì)信息,請(qǐng)參閱第 4 章“Offline Application Block 配置和安全注意事項(xiàng)”。

    綜合的端到端解決方案

    “保險(xiǎn)理賠快速入門(mén)”將本章前面部分和第 2 章中討論的所有概念結(jié)合在一起。該快速入門(mén)說(shuō)明了一個(gè)使用 Web 服務(wù)運(yùn)行在服務(wù)器(也可以是本地計(jì)算機(jī))上并提供業(yè)務(wù)功能的端到端應(yīng)用程序。

    默認(rèn)情況下,在安裝該快速入門(mén)解決方案時(shí),創(chuàng)建虛擬目錄的 Web 服務(wù)對(duì)象和腳本都會(huì)包含在其中。該腳本將在同一臺(tái)計(jì)算機(jī)上創(chuàng)建 Web 服務(wù)。作為一種備選方法,為了模擬更加真實(shí)的情形,您可以在其他計(jì)算機(jī)上創(chuàng)建 Web 服務(wù)。為此,您必須對(duì)解決方案文件進(jìn)行適當(dāng)?shù)母模瑫r(shí)也要更改 Web 參考。

    該快速入門(mén)包括兩個(gè)部分:保險(xiǎn)理賠客戶(hù)端(智能客戶(hù)端應(yīng)用程序)和保險(xiǎn)理賠服務(wù)(Web 服務(wù))。

    該客戶(hù)端為智能客戶(hù)端應(yīng)用程序,它能夠在脫機(jī)模式下工作。Web 服務(wù)能夠?qū)I(yè)務(wù)功能作為 Web 方法公開(kāi)。

    該用戶(hù)界面是單個(gè)屏幕,它結(jié)合了前面的快速入門(mén)中說(shuō)明的所有用戶(hù)界面。屏幕上包含多個(gè)按鈕,可用于強(qiáng)制應(yīng)用程序聯(lián)機(jī)或脫機(jī),下載工作項(xiàng)目,以及保存在應(yīng)用程序聯(lián)機(jī)時(shí)要上載的工作項(xiàng)目。該快速入門(mén)使用了 Offline Application Block 的所有子系統(tǒng)。

    您必須先創(chuàng)建 Web 服務(wù)和該 Web 服務(wù)所使用的數(shù)據(jù)庫(kù),然后才能構(gòu)建該快速入門(mén)。

    創(chuàng)建保險(xiǎn)理賠 Web 服務(wù)及其使用的數(shù)據(jù)庫(kù)

    1.

    要?jiǎng)?chuàng)建 Web 服務(wù),請(qǐng)運(yùn)行 CreateInsuranceClaimsServiceVDir.vbs 腳本,該腳本位于 <installationlocation>\Offline\QuickStarts\src\<language>\InsuranceClaimsQuickStart\ 文件夾中。此外,您還可以按以下方式運(yùn)行該腳本:依次單擊 StartAll ProgramsMicrosoftApplication Blocks for .NETOfflineQuick Start Samples (C#) / (VB),然后單擊 InstallInsurance Claims Service

    2.

    要?jiǎng)?chuàng)建數(shù)據(jù)庫(kù),您必須將 MSDE 2000 安裝到計(jì)算機(jī)上。有關(guān)如何獲得并安裝 MSDE 2000 的說(shuō)明,請(qǐng)參閱本章前面的“軟件要求”。

    3.

    要?jiǎng)?chuàng)建數(shù)據(jù)庫(kù),請(qǐng)運(yùn)行 CreateWebServiceDB.cmd 腳本,該腳本位于 <installationlocation>\Offline\QuickStarts\src\<language>\InsuranceClaimsQuickStart\Database\ 文件夾中。在運(yùn)行該腳本之前,您必須在 CreateWebServiceDB.cmd 腳本中更改 MSDE 2000 安裝的實(shí)例名。另外,如果 MSDE 2000 沒(méi)有安裝在默認(rèn)位置,您必須修改 InsuranceClaims.sql 腳本創(chuàng)建數(shù)據(jù)庫(kù)文件的位置。

    請(qǐng)注意,您必須在安裝有 Web 服務(wù)的計(jì)算機(jī)上執(zhí)行前面的步驟。

    要點(diǎn) 默認(rèn)情況下,MSDE 使用 Windows 身份驗(yàn)證作為其登錄模式。Web 服務(wù)運(yùn)行在名為 ASPNET 的默認(rèn)用戶(hù)下,您必須先授予該用戶(hù)權(quán)限并對(duì)其進(jìn)行配置,然后才能有效地使用 MSDE。有關(guān)如何授予權(quán)限和配置帳戶(hù)的說(shuō)明,請(qǐng)參閱 .NET Framework SDK QuickStart Configuration Details 文檔。默認(rèn)情況下,該文檔位于:<運(yùn)行 Visual Studio .NET 的計(jì)算機(jī)的 drive:\>Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Samples\Setup\html\ConfigDetails.htm。

    但是,如果要將身份驗(yàn)證從 Windows 模式更改為混合模式,您必須將以下注冊(cè)表項(xiàng)中的 LoginMode 十六進(jìn)制值從 1 更改為 2: My Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\VSDOTNET\MSSQLServer。

    在創(chuàng)建 Web 服務(wù)和數(shù)據(jù)庫(kù)后,請(qǐng)使用下列步驟來(lái)構(gòu)建快速入門(mén)。

    構(gòu)建“保險(xiǎn)理賠快速入門(mén)”

    1.

    在 Visual Studio .NET 2003 中打開(kāi) InsuranceClaimsQuickStart.sln 解決方案(位于 <installation location>\Offline\QuickStarts\src<language>\InsuranceClaimsQuickStart\ 文件夾中)。此外,您還可以按以下方式訪(fǎng)問(wèn) Offline Application Block:依次單擊 StartAll ProgramsMicrosoft Application Blocks for .NETOfflineQuick Start Samples (C#) / (VB),然后單擊 Insurance Claims Quick Start

    2.

    構(gòu)建解決方案。這將:

    ?

    在 <installation location>\Offline\QuickStarts\src\<language>\InsuranceClaimsQuickStart\InsuranceClaimsClient\ 文件夾下的 bin\<build configuration> 文件夾中生成 InsuranceClaimsClient.exe 程序集。

    ?

    在 \Offline\QuickStart\src\\InsuranceClaimsQuickStart\InsuranceClaimsService 文件夾下的 bin 文件夾中生成 InsuranceClaimsService.dll。

    3.

    在 Web 服務(wù)配置文件中更改 datasource 名稱(chēng),以指向正確的 datasource

    要啟動(dòng)該快速入門(mén),請(qǐng)雙擊 InsuranceClaimsQuickStart.exe

    “保險(xiǎn)理賠快速入門(mén)”文件

    該快速入門(mén)的解決方案位于 <installationlocation>\Offline\QuickStarts\src\<language>\ InsuranceClaimsQuickStart\InsuranceClaimsClient\ 文件夾中。表 3.4 和 3.5 說(shuō)明了與該“保險(xiǎn)理賠快速入門(mén)”討論相關(guān)的文件。

    3.4:“保險(xiǎn)理賠快速入門(mén)”文件

    文件 說(shuō)明

    App.config

    指定應(yīng)用程序的配置信息。

    InsuranceClaimsQuickStartForm.cs \ .vb

    對(duì)應(yīng)于應(yīng)用程序的視圖 (UI)。

    Controller.cs \ .vb

    管理 UI 與連接管理器和服務(wù)代理之間的交互。它可以注冊(cè)連接狀態(tài)更改事件,并通過(guò)將更改傳遞到關(guān)聯(lián)的視圖來(lái)響應(yīng)更改。創(chuàng)建 InsuranceCliamsClientServiceAgent 并使用它進(jìn)行注冊(cè),以啟動(dòng)工作項(xiàng)目的下載和上載。

    InsuranceClaimsClientServiceAgent.cs \ .vb

    啟動(dòng)工作項(xiàng)目信息的下載和上載。它可創(chuàng)建 Payload,并將用于下載或上載工作項(xiàng)目的“聯(lián)機(jī)代理”和服務(wù)代理的必要上下文信息填充在其中,然后將結(jié)果返回到控制器。

    OnlineProxy.cs \ .vb

    它負(fù)責(zé)通過(guò)與 Web 服務(wù)進(jìn)行通信來(lái)下載和上載數(shù)據(jù)。

    3.5:保險(xiǎn)理賠服務(wù)的 Web 服務(wù)文件

    文件 說(shuō)明

    Web.config

    指定 Web 服務(wù)所使用的數(shù)據(jù)庫(kù)的位置。

    InsuranceClaims.asmx,cs \ .vb

    公開(kāi)要由客戶(hù)端應(yīng)用程序使用的 Web 方法。

    詳細(xì)信息

    有關(guān)如何執(zhí)行特定操作的信息,請(qǐng)參閱前面快速入門(mén)的詳細(xì)信息。例如,前面快速入門(mén)中的詳細(xì)信息說(shuō)明了下載或上載工作項(xiàng)目所涉及的組件。

    前面的快速入門(mén)和此快速入門(mén)的唯一不同之處在于 OnlineProxy 類(lèi)的行為。要使這些快速入門(mén)保持在一個(gè)基本水平,前面快速入門(mén)中的 OnlineProxy 類(lèi)要在本地檢索或更新數(shù)據(jù)。在這種情況下,該快速入門(mén)將與 Web 服務(wù)進(jìn)行交互,并演示了一個(gè)使用 Offline Application Block 的應(yīng)用程序的端到端方案。

    返回頁(yè)首返回頁(yè)首

    使用 Offline Application Block

    在使用 Offline Application Block 之前,您應(yīng)評(píng)估現(xiàn)有的提供程序,并確定是否要使用它們或創(chuàng)建新的提供程序。

    根據(jù)應(yīng)用程序的要求評(píng)估提供程序

    當(dāng)您要將脫機(jī)功能添加到應(yīng)用程序時(shí),必須根據(jù)下列提供程序來(lái)確定應(yīng)用程序的要求:

    ?

    連接檢測(cè)提供程序 – Offline Block 提供了 WinInetDetectStrategy 用于連接管理。您應(yīng)評(píng)估它是否符合應(yīng)用程序的要求,或者您是否需要開(kāi)發(fā)一個(gè)自定義提供程序。例如,您可能需要一個(gè)自定義提供程序來(lái)確定特定 Web 服務(wù)是否可用。

    ?

    緩存存儲(chǔ)提供程序 – Cache Block 提供了 MSDE、內(nèi)存、內(nèi)存映射文件、獨(dú)立存儲(chǔ)和 SQL Server 作為存儲(chǔ)提供程序。您應(yīng)評(píng)估所有這些提供程序是否適合您的應(yīng)用程序體系結(jié)構(gòu)。如果不適合,您需要?jiǎng)?chuàng)建一個(gè)自定義提供程序。例如,您可能需要將數(shù)據(jù)緩存到其他數(shù)據(jù)庫(kù)引擎中。

    ?

    隊(duì)列存儲(chǔ)提供程序 – Offline Block 提供了 MSDE、內(nèi)存、獨(dú)立存儲(chǔ)和消息隊(duì)列作為隊(duì)列存儲(chǔ)提供程序。您應(yīng)評(píng)估所有這些提供程序是否適合您的應(yīng)用程序體系結(jié)構(gòu)。如果不適合,您需要?jiǎng)?chuàng)建一個(gè)自定義提供程序。例如,您可能需要將數(shù)據(jù)排入其他隊(duì)列存儲(chǔ)提供程序。

    加密提供程序– Common Block 提供了 Data Protection API 作為其加密提供程序。您應(yīng)根據(jù)組織的安全性要求來(lái)評(píng)估該提供程序是否適合您的應(yīng)用程序體系結(jié)構(gòu)。如果不適合,您需要?jiǎng)?chuàng)建一個(gè)自定義提供程序。

    有關(guān)在應(yīng)用程序中使用提供程序或開(kāi)發(fā)自己的自定義提供程序的信息,請(qǐng)參閱本章后面的“開(kāi)發(fā)自己的提供程序”。

    使用 Offline Block 的任務(wù)

    在設(shè)計(jì)階段,您的組織會(huì)決定 Offline Application Block 要滿(mǎn)足的業(yè)務(wù)要求。某些要求會(huì)涉及到用戶(hù)界面 (UI) 和用戶(hù)界面控制器 (UIC)。這些用戶(hù)界面依賴(lài)于您組織所提出的業(yè)務(wù)要求,并決定聯(lián)機(jī)/脫機(jī)操作與用戶(hù)之間的交互。有關(guān) UIC 和用戶(hù)界面處理 (UIP) 的討論超出了本指南的范圍。

    下表向您展示了在構(gòu)建具有脫機(jī)功能的應(yīng)用程序時(shí),可能要執(zhí)行的常見(jiàn)任務(wù)。

    開(kāi)始

    1.

    根據(jù)您開(kāi)發(fā)的應(yīng)用程序,實(shí)現(xiàn)所需的應(yīng)用程序服務(wù)代理。確保應(yīng)用程序服務(wù)代理從 ServiceAgent 基類(lèi)中派生。

    2.

    實(shí)現(xiàn) OnlineProxy 組件(通常情況下,每個(gè)應(yīng)用程序服務(wù)代理都包含一個(gè) OnlineProxy 組件,但不是必需的),它作為應(yīng)用程序與 Web 服務(wù)或與存儲(chǔ)和檢索信息的任何其他數(shù)據(jù)存儲(chǔ)區(qū)的接口。該組件包含用于訪(fǎng)問(wèn) Web 服務(wù)的特定于應(yīng)用程序的代碼。

    有關(guān)詳細(xì)信息,您可以查看“保險(xiǎn)理賠快速入門(mén)”的 Visual C# 或 Visual Basic 代碼,它位于 <installation location>\Offline\QuickStarts\src\<language>\InsuranceClaimsQuickStart\InsuranceClaimsClient 文件夾中。

    開(kāi)始訪(fǎng)問(wèn)脫機(jī)功能

    1.

    通過(guò)調(diào)用 OfflineBlockBuilder.Instance 屬性從 OfflineBlockBuilder 類(lèi)創(chuàng)建一個(gè)塊生成器實(shí)例。您可以使用該 OfflineBlockBuilder 類(lèi)構(gòu)建并訪(fǎng)問(wèn)該應(yīng)用程序塊的所有組件。OfflineBlockBuilder 實(shí)例通常在 UIC 的構(gòu)造函數(shù)中獲得,如下面的代碼所示。

    [C#]

    ...
    private OfflineBlockBuilder offlineBlockBuilderInstance;
        offlineBlockBuilderInstance = OfflineBlockBuilder.Instance;
    ...
      
    

    [Visual Basic]

    ...
    Private OfflineBlockBuilder offlineBlockBuilderInstance
        offlineBlockBuilderInstance = OfflineBlockBuilder.Instance
    ...
      
    

    2.

    使用“連接管理器”組件注冊(cè)聯(lián)機(jī)/脫機(jī)更改狀態(tài)事件,如下面的代碼所示。

    [C#]

    ...
    offlineBlockBuilderInstance.ConnectionManager.ConnectionState ChangedEvent += new ConnectionStateChangedEventHandler(ConnectionManager
            ConnectionStateChangedEvent);
    ...
      
    

    [Visual Basic]

    ...
        offlineBlockBuilderInstance AddHandler offlineBlockBuilderInstance.ConnectionManager.ConnectionStateChangedEvent, AddressOf ConnectionManagerConnectionStateChangedEvent
    ...
      
    

    3.

    為脫機(jī)客戶(hù)端創(chuàng)建一個(gè)“應(yīng)用程序服務(wù)代理”的實(shí)例。

    4.

    使用“應(yīng)用程序服務(wù)代理”為各種事件注冊(cè)控制器。這些事件可通知最終用戶(hù)在后臺(tái)發(fā)生的更改。

    5.

    如果原始的“應(yīng)用程序服務(wù)代理”不可用,則使用 FailsafeServiceAgent 注冊(cè)控制器以便處理錯(cuò)誤。

    [C#]

    ...
    FailsafeServiceAgent refFailSafeServiceAgent = offlineBlockBuilderInstance.FailsafeServiceAgent;
    refFailSafeServiceAgent.ErrorEvent += new MethodExecutionFailureReportEventHandler(
    FailSafeServiceAgentErrorEvent);
    ...
      
    

    [Visual Basic]

    ...
    Dim refFailSafeServiceAgent As FailsafeServiceAgent = offlineBlockBuilderInstance.FailsafeServiceAgent
                AddHandler refFailSafeServiceAgent.ErrorEvent, AddressOf FailSafeServiceAgentErrorEvent
    ...
      
    

    6.

    調(diào)用 OfflineBlockBuilder 對(duì)象的 Start 方法來(lái)啟動(dòng)“連接管理器”。該組件將輪詢(xún)連接狀態(tài),并在連接狀態(tài)發(fā)生更改時(shí)將事件發(fā)送到“服務(wù)代理”。

    [C#]

    ...
    offlineBlockBuilderInstance.Start() ;
    ...
      
    

    [Visual Basic]

    ...
    offlineBlockBuilderInstance = OfflineBlockBuilder.Start
    ...
      
    

    7.

    如果要強(qiáng)制應(yīng)用程序在脫機(jī)模式下工作,請(qǐng)使用 ConnectionManager 組件的 GoOffline 方法,如下面的代碼所示。

    [C#]

    ...
    offlineBlockBuilderInstance.ConnectionManager.GoOffline() ;
    ...
      
    

    [Visual Basic]

    ...
    offlineBlockBuilderInstance.ConnectionManager.GoOffline()
    ...
      
    

    8.

    如果要使應(yīng)用程序重新聯(lián)機(jī),請(qǐng)使用 ConnectionManager 組件的 GoOnline 方法,如下面的代碼所示。

    [C#]

    ...
    offlineBlockBuilderInstance.ConnectionManager.GoOnline() ;
    ...
      
    

    [Visual Basic]

    ...
    offlineBlockBuilderInstance.ConnectionManager.GoOnline()
    ...
      
    

    使用“應(yīng)用程序服務(wù)代理”中的 DataLoaderManager 將數(shù)據(jù)加載到客戶(hù)端數(shù)據(jù)存儲(chǔ)區(qū)中

    1.

    創(chuàng)建一個(gè) OnlineProxyContext 對(duì)象,Executor 將使用它來(lái)調(diào)用 OnlineProxy 類(lèi)上的方法。

    2.

    創(chuàng)建一個(gè) ServiceAgentContext 對(duì)象,ServiceAgentManager 將使用它在數(shù)據(jù)可用時(shí)調(diào)用“應(yīng)用程序服務(wù)代理”的 callback 方法。

    3.

    使用 OnlineProxyContext 和 ServiceAgentContext 創(chuàng)建一個(gè) ReferenceDataDefinition 對(duì)象。

    4.

    調(diào)用 DataLoaderManager 對(duì)象的 LoadData 方法,以將數(shù)據(jù)下載請(qǐng)求排入隊(duì)列。

    以下代碼闡釋了前面的步驟:

    [C#]

    ...
    string onlineProxyAssemblyName = "InsuranceClaimsClient";
    string onlineProxyClassName = "Microsoft.ApplicationBlocks.SmartClient.Offline.QuickStarts.OnlineProxy";
    string onlineProxyMethodName ="GetWorkItems";
    string specificServiceAgentMethodTobeInvoked = "DataAvailableCallBack";
    const int absoluteExpirationTime = 600;
    string cacheKey = "SmartClient";
    OnlineProxyContext onlineProxyMethodContext = 
        new OnlineProxyContext(onlineProxyAssemblyName, 
        onlineProxyClassName, onlineProxyMethodName);
    ServiceAgentContext specificServiceAgentContext = new 
        ServiceAgentContext(specificServiceAgentMethodTobeInvoked);
    ReferenceDataDefinition refDataDefination = new 
        ReferenceDataDefinition(cacheKey, absoluteExpirationTime, 
        onlineProxyMethodContext);
    offlineBlockBuilderInstance.DataLoaderManager.LoadData(this.Guid, 
        specificServiceAgentContext, refDataDefination);
    ...
      
    

    [Visual Basic]

    ...
    Dim onlineProxyAssemblyName As String = "InsuranceClaimsClient"
    Dim onlineProxyClassName As String = 
    "Microsoft.ApplicationBlocks.SmartClient.Offline.QuickStarts.OnlineProxy"
    Dim onlineProxyMethodName As String = "GetWorkItems"
    Dim specificServiceAgentMethodTobeInvoked As String = 
        "DataAvailableCallBack"
    Const absoluteExpirationTime As Integer = 600
    Dim cacheKey As String = "SmartClient"
    Dim onlineProxyMethodContext As New 
        OnlineProxyContext(onlineProxyAssemblyName, onlineProxyClassName, 
        onlineProxyMethodName)
    Dim specificServiceAgentContext As New 
        ServiceAgentContext(specificServiceAgentMethodTobeInvoked)
    Dim refDataDefination As New ReferenceDataDefinition(cacheKey, 
        absoluteExpirationTime, onlineProxyMethodContext)
    offlineBlockBuilderInstance.DataLoaderManager.LoadData(Me.Guid, 
        specificServiceAgentContext, refDataDefination)
    ...
      
    

    使用“應(yīng)用程序服務(wù)代理”中的 QueueManager 將數(shù)據(jù)排入隊(duì)列

    1.

    創(chuàng)建一個(gè) OnlineProxyContext,以便調(diào)用 OnlineProxy 中的方法來(lái)下載或上載數(shù)據(jù)。

    2.

    創(chuàng)建一個(gè) ServiceAgentContext 對(duì)象,以便在數(shù)據(jù)可用或更新時(shí)調(diào)用“應(yīng)用程序服務(wù)代理”中的 callback 方法。

    3.

    使用 OnlineProxyContextServiceAgentContext 方法創(chuàng)建一個(gè)新的 Payload 對(duì)象。

    4.

    調(diào)用 PayloadConsumer 對(duì)象的 Enqueue 方法,以便將數(shù)據(jù)更新請(qǐng)求排入隊(duì)列。

    以下代碼闡釋了前面的步驟:

    [C#]

    ...
    string onlineProxyAssemblyName = "InsuranceClaimsClient";
    string onlineProxyClassName = "Microsoft.ApplicationBlocks.SmartClient.Offline.QuickStarts.OnlineProxy";
    string onlineProxyMethodName ="UpdateWorkItem";
    string specificServiceAgentMethodTobeInvoked = "DataUpdatedCallBack";
    OnlineProxyContext onlineProxyMethodContext = new 
        OnlineProxyContext(onlineProxyAssemblyName, onlineProxyClassName, 
        onlineProxyMethodName);
    ServiceAgentContext specificServiceAgentContext = new 
        ServiceAgentContext(specificServiceAgentMethodTobeInvoked);
    Payload messageToEnqueue = new 
        Payload(onlineProxyMethodContext,this.Guid,
        specificServiceAgentContext, changedAppData);
    offlineBlockBuilderInstance.PayloadConsumer.Enqueue(messageToEnqueue);
    ...
      
    

    [Visual Basic]

    ...
    Dim onlineProxyAssemblyName As String = "InsuranceClaimsClient"
    Dim onlineProxyClassName As String = "Microsoft.ApplicationBlocks.SmartClient.Offline.QuickStarts.OnlineProxy"
    Dim onlineProxyMethodName As String = "UpdateWorkItem"
    Dim specificServiceAgentMethodToInvoke As String = "DataUpdatedCallBack"
    Dim onlineProxyMethodContext As New OnlineProxyContext(onlineProxyAssemblyName, onlineProxyClassName, onlineProxyMethodName)
    Dim specificServiceAgentContext As New ServiceAgentContext(specificServiceAgentMethodToInvoke)
    Dim messageToEnqueue As New Payload(onlineProxyMethodContext, _
        Me.Guid, specificServiceAgentContext, _
        changedAppData)
    offlineBlockBuilderInstance.PayloadConsumer.Enqueue(messageToEnqueue)
    
    返回頁(yè)首返回頁(yè)首

    開(kāi)發(fā)自己的提供程序

    至此,本章的重點(diǎn)一直是如何在不加修改的情況下將 Offline Application Block 用于您的應(yīng)用程序。設(shè)計(jì)的關(guān)鍵方面在于,您可以利用自己的提供程序來(lái)擴(kuò)展應(yīng)用程序塊。這些注意事項(xiàng)適用于您創(chuàng)建的任何提供程序。

    開(kāi)發(fā)自己的提供程序

    1.

    創(chuàng)建一個(gè)實(shí)現(xiàn)子系統(tǒng)相應(yīng)接口的提供程序類(lèi):

    ?

    連接檢測(cè)提供程序 – 實(shí)現(xiàn) IConnectionDetectionStrategyIProvider 接口。

    ?

    隊(duì)列存儲(chǔ)提供程序 – 實(shí)現(xiàn) IQueueStorageProvider 接口和 IProvider 接口。

    ?

    緩存存儲(chǔ)提供程序 – 實(shí)現(xiàn) ICacheStorage 提供程序接口。

    2.

    設(shè)置自定義提供程序的配置設(shè)置。每個(gè)子系統(tǒng)的提供程序都有獨(dú)立的配置區(qū)段。一般規(guī)則是:將區(qū)段中提供程序的通用屬性指定為特性,將自定義屬性指定為元素。

    WinInetDetectionStrategy 提供程序說(shuō)明了以前的設(shè)計(jì)注意事項(xiàng)如何表示“連接管理”子系統(tǒng)用于連接檢測(cè)的連接檢測(cè)提供程序。

    WinInetDetectionStrategy 提供程序?qū)崿F(xiàn) IConnectionDetectionStrategyIProvider 接口。這些提供程序的配置設(shè)置在 ConnectionManagerProviders 區(qū)段中被定義為 provider 元素,其 name 特性設(shè)置為 winINetDetectionStrategy。通用屬性被指定為特性,而自定義屬性 pollingInterval 被指定為 provider 元素的子元素。ConnectionManagerConfigurator 類(lèi)可讀取配置信息,并創(chuàng)建該提供程序的一個(gè)實(shí)例。

    設(shè)置 MSDE 和 MSMQ

    在通過(guò)這些快速入門(mén)或任何自定義應(yīng)用程序使用 MSDE 和 MSMQ 提供程序之前,您需要相應(yīng)地設(shè)置 MSDE 和 MSMQ。

    MSDE 設(shè)置

    在將 MSDE 提供程序用于緩存或隊(duì)列之前,您必須配置 MSDE,以使其在客戶(hù)端計(jì)算機(jī)上正常工作。有關(guān)詳細(xì)信息,請(qǐng)參閱 <drive:\ >Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Samples\Setup\html\ConfigDetails.htm。

    要配置 MSDE 提供程序以用于緩存,您必須創(chuàng)建該緩存塊所使用的必要表格和存儲(chǔ)過(guò)程。

    創(chuàng)建表格和過(guò)程

    1.

    在 <installation location>\Offline\Database\Cache 文件夾中找到 CreateCache.cmd 腳本。

    2.

    打開(kāi) CreateCache.cmd 文件,并更改服務(wù)器名以指向正確的服務(wù)器。

    3.

    運(yùn)行 CreateCache.cmd 腳本。

    在將 MSDE 提供程序用于隊(duì)列時(shí),您必須創(chuàng)建“消息數(shù)據(jù)管理”子系統(tǒng)所使用的必要數(shù)據(jù)庫(kù)。

    創(chuàng)建數(shù)據(jù)庫(kù)

    1.

    在 <installation location>\Offline\Database\Queue 文件夾中找到 CreateQueueDB.cmd 腳本。

    2.

    打開(kāi) CreateQueueDB.cmd 腳本,并更改服務(wù)器名以指向正確的服務(wù)器。

    3.

    如果 MSDE 沒(méi)有安裝在 C: 驅(qū)動(dòng)器上,您必須將 QueueDatabase.sql 文件中的路徑更改為 MSDE 的正確安裝路徑。

    4.

    運(yùn)行 CreateQueueDB.cmd 腳本。

    要啟用用于緩存或隊(duì)列的 MSDE 提供程序,請(qǐng)轉(zhuǎn)到 App.config 文件,然后在各自的配置區(qū)段中更改 ConnectionString,以使其指向正確的 DataSource

    消息隊(duì)列

    在將 MSMQ 提供程序用于隊(duì)列之前,您必須在本地計(jì)算機(jī)上配置“消息隊(duì)列”。有關(guān)詳細(xì)信息,請(qǐng)參閱 Microsoft Message Queuing (MSMQ) Center (http://www.Microsoft.com/windows2000/technologies/communications/msmq/default.asp)

    如果不存在隊(duì)列,Offline Application Block 將創(chuàng)建一個(gè)。建議您在使用消息隊(duì)列提供程序之前,手動(dòng)創(chuàng)建一個(gè)隊(duì)列。這可讓您根據(jù)組織的安全要求來(lái)靈活地配置“消息隊(duì)列”。以下步驟說(shuō)明如何手動(dòng)創(chuàng)建隊(duì)列。

    手動(dòng)創(chuàng)建專(zhuān)用隊(duì)列

    1.

    右鍵單擊 MyComputer,然后單擊 Manage

    2.

    ComputerManagement 中,展開(kāi) MessageQueuing 文件夾。

    3.

    在控制臺(tái)樹(shù)中,右鍵單擊 PrivateQueues 文件夾。

    4.

    指向 New,然后單擊 Private Queue

    5.

    Name 中,為新隊(duì)列鍵入一個(gè)名稱(chēng),然后單擊 OK

    - 或者 -

    要?jiǎng)?chuàng)建接受事務(wù)性消息的隊(duì)列,請(qǐng)鍵入一個(gè)名稱(chēng),選中 Transactional 復(fù)選框,然后單擊 OK

    6.

    展開(kāi) Private Queues

    7.

    右鍵單擊新創(chuàng)建的隊(duì)列并選擇 Properties

    8.

    為隊(duì)列添加常規(guī)配置和安全配置(例如安全策略或權(quán)限),然后單擊 OK

    您不能在 Outgoing QueuesSystem Queues 文件夾中創(chuàng)建隊(duì)列。這些隊(duì)列會(huì)自動(dòng)創(chuàng)建。

    在第 5 步中指定的隊(duì)列名應(yīng)添加到應(yīng)用程序的配置文件中,替換當(dāng)前的名稱(chēng)。

    有關(guān)部署要求和注意事項(xiàng)的詳細(xì)信息,請(qǐng)參閱第 4 章。

    返回頁(yè)首返回頁(yè)首

    小結(jié)

    Offline Application Block 為您提供了可用于將脫機(jī)功能添加到應(yīng)用程序的靈活設(shè)計(jì)和基礎(chǔ)結(jié)構(gòu)。在許多情況下,您可以將隨附的提供程序用于子系統(tǒng)。在某些情況下,您需要自定義這些提供程序或創(chuàng)建自己的提供程序。Offline Application Block 提供的這些快速入門(mén)為您提供了理解如何使用該應(yīng)用程序塊的有用起點(diǎn)。

    返回頁(yè)首返回頁(yè)首

    更多信息

    有關(guān) MSDE 的詳細(xì)信息,請(qǐng)參閱“Distributing the SQL Server Desktop Engine”。

    有關(guān) SQL Server 的詳細(xì)信息,請(qǐng)參閱 SQL Server

    有關(guān)消息隊(duì)列的詳細(xì)信息,請(qǐng)參閱“Message Queuing (MSMQ) ”?

    有關(guān) DPAPI 的詳細(xì)信息,請(qǐng)參閱 Windows Data Protection

    轉(zhuǎn)到原英文頁(yè)面

    posted on 2006-02-10 15:04 TrampEagle 閱讀(932) 評(píng)論(1)  編輯  收藏 所屬分類(lèi): 技術(shù)文摘

    Feedback

    # re: 使用 Offline Application Block 進(jìn)行開(kāi)發(fā) 2009-04-02 20:17 樺林露
    你好。
    你能告訴我vs2005 如何具備offline application block 的功能嗎。如果不用這個(gè) application block的話(huà)。
    謝謝。。
    急切!!  回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 中文字幕天天躁日日躁狠狠躁免费 | 亚洲av午夜精品一区二区三区| 亚洲色一色噜一噜噜噜| 亚洲国产精品人久久| 亚洲精品成a人在线观看夫| 成人免费av一区二区三区| 黄色片在线免费观看| 亚洲午夜福利精品无码| 亚洲中文无码线在线观看| 免费人成视频在线播放| 中文字幕免费在线看线人| 精品国产亚洲一区二区在线观看| 亚洲最新中文字幕| 一个人看的在线免费视频| 999国内精品永久免费视频| 亚洲日韩在线观看| 亚洲一卡2卡3卡4卡乱码 在线| xxxxx做受大片在线观看免费| 亚洲精品免费网站| 亚洲女初尝黑人巨高清| 亚洲AV无码一区二区三区电影 | 亚洲精品美女久久久久99小说| 亚洲男人的天堂在线| 国产无遮挡色视频免费观看性色| 成年人在线免费看视频| 久久亚洲AV无码精品色午夜麻| 美女被爆羞羞网站在免费观看| 日韩不卡免费视频| 亚洲妇熟XXXX妇色黄| 免费人成再在线观看网站| 99精品全国免费观看视频| 亚洲成年轻人电影网站www| 日本一区二区三区在线视频观看免费| 成年免费大片黄在线观看岛国 | AV免费网址在线观看| 亚洲日韩区在线电影| 男女猛烈无遮掩视频免费软件| 成人免费777777| 亚洲毛片免费观看| 免费91最新地址永久入口| 国产亚洲情侣一区二区无码AV|