深入剖析 SharePoint 通過 Web 服務擴展 Office 應用程序
Microsoft Windows SharePoint Services (WSS) 3.0 中的 21 種標準 Web 服務以及 Microsoft Office SharePoint Server (MOSS) 2007 中的 19 種標準 Web 服務,可讓您建立極具靈活性的解決方案,這些解決方案可用于從本地和遠程資源檢索數據、擴展標準 Microsoft Office 套件功能,以及集成業務應用程序。當然,您可能擁有甚至 40 種以上的 Web 服務。如果您安裝更多與 SharePoint 集成的服務器解決方案(如 Microsoft Office Project Server 2007),可能會發現 SharePoint 服務器上的 Web 服務數量很容易就超過 60 種。而這還不包含您可能要實現的任何自定義 SharePoint Web 服務。Web 服務是分布式業務應用程序的基本構建塊,而且在軟件+服務的時代,Web 服務的重要性更為突出,因為它們為公司提供了將內部部署解決方案與托管環境相集成的途徑。
在本專欄中,我將討論 Web 服務在 SharePoint 環境中的優點,特別是它們在標準 Office 應用程序內部和外部的應用。雖然 Office 應用程序通常依賴 Microsoft Office FrontPage 和 WSS 遠程過程調用 (RPC) 以及 Web 分布式創作和版本控制 (WebDAV) 來對 SharePoint 列表和庫進行基于文件的訪問,但它們也使用 Web 服務。WSS 3.0 所含的基本 Web 服務對大多數 Office 應用程序(例如 Microsoft Word 2007、Outlook 2007 和 Access 2007)來說已綽綽有余,而諸如 PowerPoint 2007 和 InfoPath 2007 等更多應用程序,可使用僅通過 MOSS 2007 或獨立產品提供的更多 Web 服務。我會在必要時介紹產品依存性。如果您要在測試環境中按照我講解的步驟操作,可在本專欄隨附的材料中找到包含分步指南的工作表,位于 technet.microsoft.com/magazine/bb978519 的“代碼下載”區。
詳盡的開發人員討論和業務數據集成等主題已超出本文討論范圍。我假定您熟悉 Web 服務及其在業務應用程序中的使用方式。如需關于 WSS 3.0 和 MOSS 2007 內置 Web 服務的一般性概述,我建議先從 SharePoint Server 2007 SDK 中的“Web 服務訪問”一文著手(請參閱 msdn.microsoft.com/library/bb862916.aspx)。
SharePoint Web 服務與對象模型
對于 SharePoint 解決方案開發,一個常見問題是該使用 Web 服務還是對象模型。與 Web 服務相比,對象模型更易于使用,公開的接口更多,開銷也更少;但是,由于存在 COM 依賴關系,對象模型只能用在 SharePoint 服務器上。Web 服務則比較容易訪問,因此對需要從遠程數據源聚合數據的客戶端應用程序和服務器端組件(例如業務數據 Web 組件)來說,無疑是正確選擇。隨著數據從本地的內部部署系統移動到遠程的托管環境,SharePoint 解決方案必須更多地利用面向服務的架構 (SOA),才能使用分布式 SharePoint 環境,如圖 1 中的圖表所示。
圖 1 分布式 SharePoint 環境中的 Web 服務(單擊可獲得大圖)
Web 服務消除了前端與后端子系統的緊密耦合,從而提供了廣泛的靈活性。如圖 1 所示,只要中間的 Web 服務公開預期的接口,前端便可與任何基本平臺交互。在 2008 年 9 月的專欄 (technet.microsoft.com/magazine/cc742803) 中,我通過將內置 WSS 3.0 電子郵件集成 Web 服務 (SharepointEmailWS.asmx) 替換為公開相同接口的自定義版本,演示了這種作法。
當然,同樣的策略也適用于客戶端應用程序,如使用 SharePoint Web 服務的 Office 應用程序。Stephen Toub 在他的 MSDN 文章“自定義 Outlook 2003 的日歷提供程序”中,建立了一個自定義 Web 服務來鏡像 SharePoint Lists 服務 (Lists.asmx) 的接口,將自定義數據(而不是 SharePoint 列表項目)返回給 Outlook,從而清楚地演示了這種作法(請參閱 msdn.microsoft.com/aa168130)。他演示了 Outlook 日歷如何顯示事件日志中的項目、RSS 源中的項目、新聞組的帖子、Windows Live Messenger 中的對話以及計算機上的系統還原點等諸多數據,隨后更擴展了解決方案以支持聯系人列表。
Patrick Creehan 在 2006 年更新了這項實現,使之現在也能與 Outlook 2007 搭配使用(請參閱 Patrick 的博客文章“自定義 Outlook 2007 的日歷提供程序”,網址是 blogs.msdn.com/pcreehan/archive/2006/11/21/custom-calendar-providers-for-outlook-2007.aspx)。
Outlook 2007 與 StsSync 協議
知道自定義列表提供程序可以利用 Outlook 與 SharePoint 的集成之后,讓我們仔細討論一下 Outlook/SharePoint 的交互。為了訪問 SharePoint 列表或文檔庫的內容,Outlook 會通過 Lists Web 服務與 SharePoint 通信,并且將列表及其項目與標準 Outlook 文件夾并排顯示。您也可以直接在 Outlook 中創建全新項目或更新現有項目,若是后者,Outlook 會使用 Lists 服務來更新 SharePoint 存儲庫。交互和解決方案體系結構相對簡單,如圖 2 所示。
圖 2 Outlook StsSync 體系結構(單擊可獲得大圖)
為了鏈接到所需的列表,Outlook 支持一種基于 StsSync 協議標識符的特殊 URL 格式,它向 Outlook 注冊為協議處理程序。您可以在工作站的以下注冊表項中找到對應的注冊:HKEY_CLASSES_ROOT\StsSync\Shell\Open\Command。Outlook 以命令行參數的形式接收 StsSync URL,將它分解為單獨的各個組件,然后使用參數鏈接到指定的 SharePoint 列表。
StsSync URL 既冗長又難懂,因為它們包含采用典型 URL 字符編碼格式的幾個查詢字符串參數,例如:
stssync://sts/?ver=1.0&type=calendar&cmd=add-folder&base-url=http%3A%2F%2Fsharepoint%2FHR%2FAdministration&list-url=%2FLists%2FCalendar%2FAllItems%2Easpx&guid=%7B4DF13090%2DDE1C%2D43EA%2D8B44%2D904869FEABC4%7D&site-name=HR%20Site&list-name=Admin%20Events
幸運的是,如果您從 SharePoint 用戶界面內將 Outlook 鏈接到所需列表,則不需要直接指定這些 URL;而只需在 Internet Explorer 打開 SharePoint 列表,然后在列表的“操作”菜單上單擊“連接到 Outlook”即可。此命令會調用稱為 ExportHailStorm 的 JavaScript 函數(位于服務器上的 \%PROGRAMFILES%\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\LAYOUTS\1033\Init.js 中),該函數根據列表參數構建 StsSync URL,然后將得到的 URL 傳送給 Internet Explorer,Internet Explorer 隨后將這個 URL 傳送給已注冊的協議處理程序,即 Outlook。如需關于如何在 Outlook 中使用 SharePoint 列表的示例,請參閱隨附的“在 WSS 中使用 Outlook”工作表。
最重要的 StsSync 參數之一是 base-url,它指向 SharePoint 站點,如 sharepoint/HR/Administration。Outlook 會自動向此 URL 追加對 Lists Web 服務的引用(例如,sharepoint/HR/Administration/_vti_bin/Lists.asmx)。于是,與 SharePoint 通信的方式就很清楚了。msdn.microsoft.com/cc313101 上提供的“StsSync 結構說明”介紹了 StsSync URL 的各個部分。
Excel 2007 與 Excel Web Access
在圖 2 中,您可能已經注意到 SharePoint“操作”菜單上“連接到 Outlook”下的“導出到電子表格”選項,它可以將列表的內容導出到 Excel 電子表格中。Excel 2007 并不使用 StsSync 協議。實際上,“導出到電子表格”會調用一個名為 ExportList 的函數(位于 SharePoint 服務器上的 \%PROGRAMFILES%\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\LAYOUTS\1033\Core.js 中),它會開始一系列有效的步驟來導出列表項目。這項功能并不使用 Web 服務。
ExportList 調用會生成一個指向 ISAPI 擴展 (Owssvr.dll) 的 HTTP 請求,請求生成并返回 Web 查詢 (.iqy) 文件。此 .iqy 文件包含一個 Web 查詢語句,它會引用 Owssvr.dll 以便以 XML 文檔的形式從 SharePoint 列表檢索實際的數據。您可以將 Owssvr.dll 視為早期版本的 Web 服務,但它的接口并不遵守 Web 服務的行業標準,因此可以說 Excel 并不使用現成的 Web 服務。
真正使用 Web 服務的 Excel 解決方案是 Excel Web Access,它包含在 MOSS 2007 中,如圖 3 所示。事實上,Excel Web Access 使用 Excel Services (ExcelService.asmx),而該服務又依賴于 Excel Calculation Services (ECS),它是一個計算引擎,提供與 Excel 2007 桌面應用程序相同的計算功能。Excel Web Access 可以用作數據視圖和參數化分析工具。通過將特定單元格指定為參數,以便只在線顯示工作表的特定部分,并對工作簿本身設置 SharePoint 訪問權限,管理員可以非常精細地控制用戶能在 Excel 工作簿中訪問的內容。出于安全性考慮,Excel Web Access 和 Excel Services 并不支持 Excel 2007 的部分功能,例如內嵌 Visual Basic 代碼、表單控件以及外部引用。然而,解決方案開發人員可以創建能夠在 SharePoint 上從工作簿內部訪問的托管代碼。有關 Excel Services 的詳細信息,包括分步操作指南,請參閱“Excel Services 分步指南”,網址是 technet.microsoft.com/cc263430。
圖 3 Excel 和 Excel Web Access 體系結構(單擊可獲得大圖)
Access 2007 與 Access Web 數據表控件
與將 SharePoint 列表導出到電子表格相似,您也可以使用“操作”菜單上的“使用 Access 打開”選項將列表導出到數據庫。“使用 Access 打開”同樣依賴 Owssvr.dll ISAPI 擴展從 SharePoint 獲取數據。如果單擊“使用 Access 打開”,您會調用 JavaScript 函數 ExportToDatabase(位于 SharePoint 服務器上的 %\PROGRAMFILES%\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\LAYOUTS\1033\Core.js 中),它會實例化一個 SharePoint.ExportDatabase ActiveX 控件。此控件會與 Owssvr.dll 通信,并創建包含以下內容的 Access 數據庫:數據表、視圖、報表,以及鏈接到 SharePoint 列表對象或根據您的導出選項從 SharePoint 復制到數據庫的其他對象。請參閱隨附的“在 WSS 中使用 Access”工作表,開始在 Access 2007 中使用 SharePoint 列表。
雖然 SharePoint.ExportDatabase ActiveX 控件會與 Owssvr.dll 通信,而且不會使用 Web 服務,但 Access 2007 實際上通過一個稱為 Stslist.dll 的 DLL 使用 SharePoint Web 服務,如圖 4 所示。例如,您可以顯示 Access 2007 中的“外部數據”功能區,單擊“SharePoint 列表”,然后鏈接到所需列表作為鏈接數據表的數據源。在此方案中,Access 會調用服務器上的 Lists Web 服務 (Lists.asmx)。接下來,您可以使用 SQL 語句來搜索或更新 Access 中的數據。每次修改鏈接的數據表中的記錄時,Access 也會調用 Lists.asmx,以確保 SharePoint 數據保持最新狀態。
圖 4 Access 和 Access Web 數據表體系結構(單擊可獲得大圖)
您還可以將單個 Access 數據表作為列表導出到 SharePoint,甚至將整個 Access 數據庫移動到 SharePoint 站點,此操作會為每個數據表創建一個 SharePoint 列表,并通過一次批處理操作將所有的數據移到 SharePoint。雖然 SharePoint 無法在它的列表中強制要求引用完整性(將包含引用項目的數據庫移動到 SharePoint 的用戶會收到一條指示該結果的警告消息),但它確實允許像數據表一樣在列表之間進行引用。當從 Access 導出數據表時,除了 Lists.asmx 之外,Access 還會與 Webs (Webs.asmx) 和 Views (Views.asmx) Web 服務通信,以便為每個數據表創建一個列表,并為每個數據表列創建一個網站欄,還會根據這些網站欄創建列表視圖。
順利導出之后,您可能要在數據表視圖中查看 SharePoint 列表。只需單擊列表“操作”菜單上的“在數據表中編輯”選項即可。“在數據表中編輯”會將瀏覽器重定向到一個通過下列 CLSID 引用 Access Web 數據表控件的網頁:65BCBEE4-7728-41A0-97BE-14E1CAE36AAE。Internet Explorer 接著會在本地工作站上將此 ActiveX 控件加載到網頁中。如果您在運行 2007 Office System 的工作站上搜索注冊表,可以在 HKEY_CLASSES_ROOT 配置單元中找到 ActiveX 控件的對應注冊表項 (ProgID ListNet.ListNet)。查看 InprocServer32 注冊表項,您會發現 Access Web 數據表控件在 Stslist.dll 中實現。Access Web 數據表控件與 Access 2007 使用相同的 Web 服務。
Word 2007 與 MetaWeblog API
Word 2007 使用一項獨特的 Web 服務(在稱為 Metaweblog.aspx 的文件中實現),在 SharePoint 服務器上利用 MetaWeblog API。此 API 只公開三個方法(newPost、editPost 和 getPost),但它仍使用 XML 結構在 HTTP 上通信。WSS 3.0 以博客站點模板和 Web 管理界面支持現成的博客功能。基于 MetaWeblog API,您可以將 Word 2007 用作博客程序,它是替代瀏覽器界面的可行方法。
請注意,與其他 SharePoint Web 服務不同,MetaWeblog 服務不使用 .asmx 文件擴展名。MetaWeblog API 在五年前由 Dave Winer 開發,而主流博客工具都希望通過 .aspx 網頁訪問此 API(您可以在 xmlrpc.com/metaWeblogApi 閱讀說明)。SharePoint 不采用一般的 .asmx 命名約定而使用 .aspx,以便與這些博客工具保持兼容。
PowerPoint 2007 與 MOSS 2007
在 WSS 3.0 環境中,PowerPoint 2007 不使用 Web 服務,而在訪問文檔庫中的演示文稿文件時主要通過 FrontPage/WSS RPC 和 WebDAV 與 SharePoint 通信。但是,如果您有 MOSS 2007,則 PowerPoint 可利用 SharePoint 幻燈片庫和 Slide Library Web 服務 (SlideLibrary.asmx)。
幻燈片庫是一種特殊類型的文檔庫。您可以將它們與 PowerPoint 的“發布幻燈片”功能結合使用,將演示文稿分成單個幻燈片,并將這些幻燈片另存為文件夾或庫中的單獨文件。在幻燈片庫中發布幻燈片時,PowerPoint 會與 Webs.asmx 和 Slidelibrary.asmx 進行通信,以驗證 URL 并檢查是否存在幻燈片沖突。若幻燈片庫中已存在同名幻燈片,則 PowerPoint 會提示您替換現有的幻燈片或跳過當前幻燈片。
幻燈片一旦上載到幻燈片庫,就可以重復用于其他演示文稿,而原始幻燈片仍會保存在 SharePoint 服務器上的幻燈片庫中。SharePoint 會為每個幻燈片添加時間戳,而 PowerPoint 可以檢查這個時間戳和其他元數據(如作為幻燈片來源的 PowerPoint 演示文稿的名稱),以通過 Slide Library Web 服務來檢測更新。如果存在更新,您可以替換當前演示文稿中的本地幻燈片,或將已更改的幻燈片追加到您的演示文稿中。有關簡介,請閱讀文章“使用幻燈片庫來共享和重復使用 PowerPoint 2007 幻燈片內容”,網址是 office.microsoft.com/en-us/powerpoint/HA012261671033.aspx。另請參閱名為“使用幻燈片庫”的隨附工作表。
有時候,您在發布幻燈片時,可能會注意到 PowerPoint 2007 中出現一條錯誤消息:“n 個幻燈片(共 n 個)發布到 <library> 失敗。請嘗試重新發布。”這是因為缺少訪問權限或 WebDAV 通信問題所致。解決方法是:將幻燈片發布到本地文件系統上的文件夾,然后使用 Windows 資源管理器和幻燈片庫的 UNC 路徑手動將文件復制到幻燈片庫,例如 \\sharepoint\SlideLib,而不是 sharepoint/SlideLib。Windows 資源管理器使用與 PowerPoint 2007 相同的 WebDAV 重定向程序,但它不會與 SlideLibrary.asmx 進行通信來檢測幻燈片沖突。實際上,它使用 WebDAV 來檢測文件是否已存在。圖 5 顯示 PowerPoint 2007 的幻燈片庫體系結構。
圖 5 PowerPoint 和 SlideLibrary 體系結構(單擊可獲得大圖)
InfoPath 2007 與 InfoPath Forms Services
如果不討論 InfoPath 2007 與 InfoPath Forms Services,本專欄就不算完整。事實上,InfoPath 2007 可說是本專欄所討論的 Office 應用程序中最重要的 Web 服務使用者。當然,您可以在 InfoPath 表單中將 Web 服務作為數據源廣泛使用,但即使不考慮表單開發,而將重點放在發布不使用外部數據源的簡單表單模板,除了 FrontPage/WSS RPC 和 WebDAV 之外,InfoPath 2007 還會通過 Web 服務與 SharePoint 通信,如圖 6 所示。如需在 SharePoint 表單庫中發布表單模板的示例,請參閱“代碼下載”中提供的“使用 InfoPath Forms Services”工作表。
圖 6 InfoPath 和 Forms Services 體系結構(單擊可獲得大圖)
InfoPath 2007 所依賴的重要 Web 服務是 Webs.asmx 與 Lists.asmx。此外,InfoPath 還會從 Web 服務檢索有關網站欄定義和內容類型的信息,并使用此信息來填充“選擇域或組”對話框中的網站欄列表框,因此,您可以在發布表單模板時將表單欄與現有的 SharePoint 網站欄關聯起來。InfoPath 可使用 Lists 服務,在 SharePoint 站點中沒有任何關聯的情況下創建任何新欄。InfoPath 還會與 Lists 服務交互,以創建表單庫和表單模板的內容類型定義。對于實際的模板上載,InfoPath 則使用 FrontPage/WSS RPC 和 WebDAV,將具有 template.xsn 文件名的模板直接放入新庫的 Forms 子文件夾。
對于與瀏覽器兼容的表單模板,InfoPath 中的“發布向導”可能會提供使用瀏覽器填寫表單的選項,具體取決于您在 SharePoint 服務器上安裝的是 MOSS 2007 還是 Microsoft Office Forms Server 2007。InfoPath 會使用 FormServerDetector.aspx 網頁(如 sharepoint/_layouts/FormServerDetector.aspx?IsFormServerEnabled=check)檢測當前 SharePoint 站點是否安裝和啟用 Forms Services,該網頁會在安裝并啟用 Forms Services 時返回 <server IsFormServerEnabled = 'true' />。如果您隨后讓表單使用瀏覽器來填寫,InfoPath 2007 會在發布過程中調用 Forms Services Web 服務 (FormsServices.asmx) 以相應地啟用表單模板的瀏覽器功能。有關啟用瀏覽器的 InfoPath 表單的詳細信息,請參閱 msdn.microsoft.com/aa701145 上提供的“Microsoft Office Forms Server 2007 一般性參考資料”。
結論
Web 服務是 SharePoint 平臺的重要組成部分。它們使業務解決方案能夠訪問本地和遠程資源,將分布式業務應用程序彼此集成,并為 Office 應用程序提供重要功能。使 Office 應用程序與 SharePoint 站點、列表和庫協同使用的最重要 Web 服務是 WSS 3.0 中包含的 Webs.asmx 和 Lists.asmx。另外一個偶爾會用到的 Web 服務是 Views.asmx,它提供了與列表視圖協同使用的方法。大多數 Office 應用程序都不需要部署 MOSS 2007,不過有些應用程序(如 PowerPoint 2007 和 InfoPath 2007)可從高級功能(如只通過 MOSS 2007 或獨立產品提供的幻燈片庫和 Forms Services)中受益。
在軟件+服務的時代,Web 服務起著非常重要的作用,因為它們將托管后端環境與內部部署的前端應用程序相分離。SharePoint 是推動在線協作向前發展的關鍵技術;Office 應用程序和 Office 加載項繼續在本地工作站上運行,而將 Web 服務與其他 Web 技術結合可在分布式環境中跨公司防火墻無障礙地訪問功能和數據。SharePoint 服務器承載 20、40、60 個或更多 Web 服務并不是巧合。Web 服務是強調易用性、易訪問性和靈活性的業務解決方案的正確選擇,對象模型則是構建這些 Web 服務的最佳選擇。
Pav Cherny 是 IT 專業人員兼作者,專門研究 Microsoft 協作與統一通信技術。其著述包括白皮書、產品手冊和書籍,其內容主要介紹 IT 運營和系統管理。Pav 是 Biblioso Corporation 的總裁,該公司主要經營托管文檔和本地化服務。
原文 | 來源:微軟TechNet中文站