共用方式為


存貨追蹤程式範例

更新: 2006 年 7 月 17 日

「存貨追蹤」範例顯示如何使用條件動作以允許訂閱者定義其自己的訂閱查詢子句。

狀況

您想要在庫存量變更時通知公司的員工。因為不同的人尋找不同的資料 (如低存貨、高存貨或大量存貨變更),所以您想要允許個人建立其自己的訂閱條件。

在此範例中,訂閱者 Stephanie 和 David 各自建立訂閱。Stephanie 的訂閱指定在產品 "Road-250 Black, 48" 的最終組件存貨低於 35 (含) 時通知她。David 的訂閱指定在產品 "HL Crankarm" 的子組件存貨低於 250 (含) 時通知他。

AdventureWorks Production.Inventory 資料表上的更新觸發程序會將這些事件加入系統。每當存貨資料更新時,該觸發程序就會將事件提交給「存貨追蹤程式」應用程式。在事件到達的產生器配量結尾,「存貨追蹤程式」應用程式會引發規則,比對事件資料與訂閱資料,並產生通知。

然後,透過電子郵件將通知傳送給訂閱者。

語言

XML、XSLT、Transact-SQL、Microsoft Visual C# 或 Microsoft Visual Basic

功能

「存貨追蹤程式」範例使用 Notification Services 的下列功能。

應用程式區 功能

事件類別

基本事件佇列,無紀事輯。

訂閱類別

訂閱規則,屬於事件驅動並使用條件動作來支援彈性訂閱邏輯。無紀事輯。

通知類別

摘要傳遞。

事件提供者

非裝載的事件提供者,在 AdventureWorks 資料庫中實作為更新觸發程序。

內容格式器

XSLT 內容格式器。

傳遞通訊協定

File 和 SMTP 傳遞通訊協定。

Notification Services 引擎

Microsoft Windows 服務,是註冊執行個體時所建立的。

必要條件

執行此範例之前,請確定已安裝下列軟體:

  • Microsoft SQL Server 2005,包括下列元件:
    • Database Engine。
    • Notification Services。
    • SQL Server Management Studio。
    • Notification Services 範例。SQL Server 2005 中隨附這些範例。您可以從 SQL Server 開發人員網站下載最新版的範例。
    • AdventureWorks OLTP 範例資料庫。SQL Server 2005 中包含此資料庫,也可以從 SQL Server 開發人員網站取得。如需詳細資訊,請參閱<執行安裝程式來安裝 AdventureWorks 範例資料庫和範例>。
  • .NET Framework SDK 2.0 或 Microsoft Visual Studio 2005。您可以免費取得 .NET Framework SDK。請參閱<安裝 .NET Framework SDK>。
  • Simple Mail Transfer Protocol (SMTP) 服務,其為 Internet Information Services (IIS) 的元件。在 Microsoft Windows Server 2003 上,依預設 SMTP 並未隨 IIS 一同安裝。請參閱 IIS 文件集,以取得有關如何安裝和使用「SMTP 服務」的指示。
    ms161543.note(zh-tw,SQL.90).gif附註:
    執行此範例之前,請確認您的 SMTP 服務已停止。停止 SMTP 服務會將訊息保留在伺服器上,而不是讓 SMTP 服務嘗試將這些訊息傳送給不存在的訂閱者。

建立範例

若要建立執行個體,需要執行下列動作:

  • 建立用於評估規則的「SQL Server 登入」。
  • 建立 Notification Services 的執行個體。
  • 註冊 Notification Services 的執行個體。
  • 將資料庫權限授與 Windows 服務。
  • 建立觸發程序,並將資料庫權限授與規則評估帳戶。

下列程序顯示如何為 InventoryTracker 範例執行上述每個工作。

步驟 1:建立用於規則評估的 SQL Server 登入帳戶

  1. 開啟 SQL Server Management Studio,並連接到 SQL Server 的執行個體。

    當應用程式具有包含條件動作的規則時,應用程式需要登入來評估條件。使用這個個別的登入可讓您限制訂閱者建立規則所針對的資料,並能協助保護機密資料。

    在建立 Notification Services 的執行個體之前,此登入必須存在於伺服器上,而不得存在於資料庫中。此範例使用一個 SQL Server 驗證登入名稱:NSRulesEvaluator。在您自己的應用程式中,您可以使用 SQL Server 驗證或 Windows 驗證。

    ms161543.note(zh-tw,SQL.90).gif附註:
    可能的話,請使用「Windows 驗證」。
  2. 在 [物件總管] 中,展開 [安全性] 節點。

  3. 以滑鼠右鍵按一下 [登入],然後選取 [新增登入]

  4. 選取 [SQL Server 驗證]

    此帳戶不是用於連接伺服器。Database Engine 之執行個體內的 Notification Services 產生器會使用該帳戶來評估條件。

  5. [登入名稱] 方塊中,輸入 NSRulesEvaluator

    輸入 NSRulesEvaluator 登入的密碼。

  6. [資料庫] 方塊中,選取 [AdventureWorks]

  7. 按一下 [確定]

    如果出現一個對話方塊,說明該登入沒有預設資料庫的存取權限,請按一下 [確定]。稍後在此範中,您將授與資料庫權限。

步驟 2:建立 Notification Services 的執行個體

  1. 在 [物件總管] 中,以滑鼠右鍵按一下 [Notification Services],然後選取 [新的 Notification Services 執行個體]

  2. [新增 Notification Services 執行個體] 對話方塊中,按一下 [瀏覽],導覽至 [InventoryTracker] 資料夾,然後選取 InstanceConfig.xml 檔案。

  3. [參數] 方塊中,輸入三個參數的值:

    • SampleDirectory:「存貨追蹤程式」範例根資料夾的路徑。預設路徑為 C:\Program Files\Microsoft SQL Server\90\Samples\Notification Services\InventoryTracker\。
    • SQLServer:Database Engine 執行個體的名稱。
    • NotificationServicesHost:執行 Notification Services 之伺服器的名稱。對於範例,這應該為本機電腦的名稱。
  4. 選取 [建立執行個體之後啟用它] 核取方塊。

  5. 按一下 [確定]

  6. 當 Notification Services 完成建立執行個體時,請按一下 [關閉]

步驟 3:註冊 Notification Services 的執行個體

  1. 在 [物件總管] 中,展開 [Notification Services] 節點,以滑鼠右鍵按一下 [InventoryTrackerInstance],並指向 [工作] 後,再選取 [註冊]

  2. [註冊] 對話方塊中,選取 [建立 Windows 服務] 核取方塊。Windows 服務會在此電腦上執行 Notification Services 的執行個體。

  3. [服務登入] 下,輸入 Windows 登入帳戶和密碼。這是執行服務時將使用的 Windows 帳戶。如果使用「Windows 驗證」來存取 SQL Server,則 Windows 服務也會使用此帳戶連接到 SQL Server。

  4. 若要使用「SQL Server 驗證」存取 SQL Server,請選取 [驗證] 下的 [SQL Server 驗證],然後輸入 SQL Server 登入名稱和密碼。

    建議使用「Windows 驗證」。

  5. 按一下 [確定]

  6. 當 Notification Services 完成註冊執行個體時,請按一下 [關閉]

ms161543.note(zh-tw,SQL.90).gif附註:
如果使用資料庫擁有者或系統管理員帳戶部署 Notification Services 範例,則不需要將 SQL Server 權限授與該帳戶。授與這些權限可能會導致錯誤,但您可以忽略這些錯誤。部署自己的應用程式時,應該使用較低權限的帳戶來協助增進安全性。

步驟 4:將資料庫權限授與 Windows 服務

  1. 在 [物件總管] 中,展開 [安全性]

  2. 如果需要建立新 Windows 服務的資料庫登入帳戶,請以滑鼠右鍵按一下 [登入],選取 [新增登入],然後建立登入帳戶:

    • 若要使用「Windows 驗證」,請選取 [Windows 驗證],並輸入註冊執行個體時指定的 Windows 帳戶。
    • 如果必須使用「SQL Server 驗證」,請選取 [SQL Server 驗證],然後輸入註冊執行個體時指定的 SQL Server 登入和密碼。
  3. 如果 Windows 服務所使用的登入已經具有對 SQL Server 的存取權限,請以滑鼠右鍵按一下登入,並選取 [屬性]

  4. [登入] 對話方塊的左窗格中,選取 [使用者對應]

  5. 授與 AdventureWorks 資料庫的權限:

    1. [已對應到此登入的使用者] 方塊中,選取 [AdventureWorks]
    2. [AdventureWorks 的資料庫角色成員資格] 方塊中,選取 [NSRunService]
  6. 按一下 [確定] 套用權限。

  7. 設定 [通知] 資料夾的安全性:

    1. 導覽到範例的 [通知] 資料夾。
    2. 以滑鼠右鍵按一下 [通知] 資料夾,選取 [共用與安全性],然後選取 [安全性] 索引標籤。
    3. 按一下 [加入],並加入 Windows 服務使用的帳戶。
    4. [群組或使用者名稱] 方塊中,選取剛加入的帳戶。
    5. [權限] 方塊中,選取 [寫入]
    6. 按一下 [確定] 以套用這些變更。

步驟 5:設定資料庫觸發程序並授與資料庫權限

  1. 從 SQL Server Management Studio 的 [檔案] 功能表,選取 [開啟],然後選取 [檔案]

  2. 在 [檔案] 對話方塊中,開啟 SetupInventoryTrackerSample.sql。

    此檔案的預設位置是 C:\Program Files\Microsoft SQL Server\90\Samples\Notification Services\InventoryTracker\SQLScripts。

  3. 如果出現 [連接到 Database Engine] 對話方塊,請輸入連接資訊,然後按一下 [連接]

  4. 按 F5 鍵以執行 Transact-SQL 陳述式。

產生強式名稱金鑰檔

如果您尚未建立強式名稱金鑰檔,請利用下列指示產生金鑰檔。

若要產生強式名稱金鑰檔

  1. 開啟 Microsoft Visual Studio 2005 命令提示字元。按一下 [開始],依序指向 [程式集] 和 [Microsoft .NET Framework SDK 2.0],然後按一下 [SDK 命令提示字元]。

    -- 或 --

    開啟 Microsoft .NET Framework 命令提示字元。按一下 [開始],依序指向 [所有程式] 和 [Microsoft .NET Framework SDK 2.0],然後按一下 [SDK 命令提示字元]。

  2. 使用變更目錄命令 (CD),將命令提示字元視窗的現行目錄切換到範例的安裝資料夾。

    ms161543.note(zh-tw,SQL.90).gif附註:
    若要判斷範例所在的資料夾,按一下 [開始] 按鈕,依序指向 [所有程式]、[Microsoft SQL Server] 和 [文件集和教學課程],然後按一下 [範例目錄]。如果是使用預設安裝位置,則範例位於 <system_drive>:\Program Files\Microsoft SQL Server\100\Samples。
  3. 在命令提示字元中,執行下列其中一個命令來產生金鑰檔:

    sn -k SampleKey.snk

    ms161543.note(zh-tw,SQL.90).gif重要事項:
    如需有關強式名稱金鑰組的詳細資訊,請參閱 MSDN 中 .NET Development Center 中的<Security Briefs: Strong Names and Security in the .NET Framework>。

執行範例

若要執行範例,需要執行下列動作:

  • 啟動執行個體。
  • 加入訂閱者和訂閱。
  • 卸除包含事件的 XML 檔案。
  • 檢視產生的通知。

下列程序顯示如何執行這些工作,以及之後如何檢視產生的通知。

步驟 1:啟動執行個體

  1. 在 [物件總管] 中,展開 [Notification Services]

  2. 以滑鼠右鍵按一下 [InventoryTrackerInstance],然後選取 [啟動]

步驟 2:加入訂閱者和訂閱

  1. 建立 InventoryTracker 或 InventoryTracker_VB Visual Studio 方案

    如果您使用的是 Microsoft .NET Framework SDK,請執行下列工作:

    1. [開始] 功能表上,指向 [所有程式]\[Microsoft .NET Framework SDK v2.0],然後按一下 [SDK 命令提示字元]
    2. 導覽到「存貨追蹤程式」範例的根資料夾。若為預設位置,請輸入下列命令:
      cd \Program Files\Microsoft SQL Server\90\Samples\Notification Services\InventoryTracker
    3. 輸入下列項目以建立方案
      [C#]
      msbuild InventoryTracker.sln
      [Visual Basic]
      msbuild InventoryTracker_VB.sln

    如果您是使用 Visual Studio 2005,請執行下列工作:

    1. 開啟您選擇的方案檔 (InventoryTracker.sln 或 InventoryTracker_VB.sln)。
    2. 按 F6 以建立方案。
  2. 執行 AddSubscribers.exe。

    此檔案的預設位置是 C:\Program Files\Microsoft SQL Server\90\Samples\Notification Services\InventoryTracker\AddSubscribers\language\AddSubscribers\bin\Debug。

  3. 執行 AddSubscriptions.exe。

    C:\Program Files\Microsoft SQL Server\90\Samples\Notification Services\InventoryTracker\AddSubscriptions\language\AddSubscriptions\bin\Debug。

ms161543.note(zh-tw,SQL.90).gif附註:
如果是使用實際執行的應用程式,或者您是使用受限制的帳戶執行這個應用程式,請在執行個體及應用程式資料庫中,將應用程式的 SQL Server 登入加入到 NSSubscriberAdmin 資料庫角色。

步驟 3:觸發事件

  1. 從 SQL Server Management Studio 的 [檔案] 功能表,選取 [開啟],然後選取 [檔案]

  2. 在 [檔案] 對話方塊中,開啟 UpdateProductInventory.sql。

    此檔案的預設位置是 C:\Program Files\Microsoft SQL Server\90\Samples\Notification Services\InventoryTracker\SQLScripts。

    此指令碼會將更新觸發程序加入 AdventureWorks 資料庫中,然後將資料庫權限授與 NSRulesEvaluator 登入。

  3. 如果出現 [連接到 Database Engine] 對話方塊,請輸入連接資訊,然後按一下 [連接]

步驟 4:檢視通知

  1. Notification Services 大約需要一分鐘產生通知。

  2. 使用 [Windows 檔案總管],導覽到 InventoryTracker 範例的 [Notifications] 資料夾。您應該找到名為 FileNotifications.txt 的檔案。此檔案包含以檔案為基礎的通知。

  3. 導覽到要卸除電子郵件訊息的資料夾。它通常是 C:\Inetpub\mailroot 中的資料夾之一。通知應位於 [收取] 資料夾或 [佇列] 資料夾,視 SMTP 伺服器狀態而定。如果 SMTP 服務正在執行,訊息可能會移至 [垃圾郵件] 資料夾。

步驟 5:重設存貨

  1. 從 SQL Server Management Studio 的 [檔案] 功能表,選取 [開啟],然後選取 [檔案]

  2. 在 [檔案] 對話方塊中,開啟 ResetProductInventory.sql。

    此檔案的預設位置是 C:\Program Files\Microsoft SQL Server\90\Samples\Notification Services\InventoryTracker\SQLScripts。

    此指令碼會使 AdventureWorks 資料庫返回至其先前狀態,此舉可讓您再次執行該範例。

  3. 如果出現 [連接到 Database Engine] 對話方塊,請輸入連接資訊,然後按一下 [連接]

移除範例

使用下列程序可移除「存貨追蹤程式」範例。

若要移除「存貨追蹤程式」範例

  1. 在 SQL Server Management Studio 的 [物件總管] 中,開啟 [Notification Services] 資料夾。

  2. 以滑鼠右鍵按一下 [InventoryTrackerInstance],然後選取 [停止]

  3. 以滑鼠右鍵按一下 [InventoryTrackerInstance],並指向 [工作] 後,再選取 [取消註冊]

  4. 以滑鼠右鍵按一下 [InventoryTrackerInstance],並指向 [工作] 後,再選取 [刪除]

請參閱

其他資源

SQL Server Notification Services 範例

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2006 年 4 月 14 日

新增內容:
  • 新增有關使用資料庫擁有者權限執行範例的注意事項。

2005 年 12 月 5 日

變更的內容:
  • 已變更產生金鑰檔的指示,包括金鑰檔的名稱和位置。
  • 新增有關規則評估工具帳戶的安全性最佳作法的資訊。