原文引自:
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)容
現(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)置提供程序。這些提供程序使用:
除其他提供程序之外,該應(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:依次單擊 Start、All Programs、Microsoft Application Blocks for .NET、Offline,然后單擊 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)建的文件夾
<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)用程序塊所提供的提供程序的源代碼。 |
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 Offline 和 Go 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)”:依次單擊 Start、All Programs、MicrosoftApplicationBlocks for .NET、Offline、QuickStartSamples (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)”文件
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)”:依次單擊 Start、All Programs、MicrosoftApplication Blocks for .NET、Offline、Quick 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)”文件
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)”:依次單擊 Start、All Programs、Microsoft Application Blocks for .NET、Offline、Quick 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)”文件
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)求和提供必要上下文信息(例如 OnlineProxyContext 和 ServiceAgentContext 對(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)行該腳本:依次單擊 Start、All Programs、MicrosoftApplication Blocks for .NET、Offline、Quick 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:依次單擊 Start、All Programs、Microsoft Application Blocks for .NET、Offline、Quick 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)”文件
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ù)文件
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)用程序的端到端方案。
使用 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. |
使用 OnlineProxyContext 和 ServiceAgentContext 方法創(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)
開(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) IConnectionDetectionStrategy 和 IProvider 接口。 |
? |
隊(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) IConnectionDetectionStrategy 和 IProvider 接口。這些提供程序的配置設(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 Queues 或 System 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 章。
小結(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)。
更多信息
有關(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è)面