作者:Chris Kunicki
OfficeZealot.com
2003 年 3 月 3 日
摘要:Chris Kunicki 討論如何建立研究參考資料庫 (Research Library),這是 Microsoft Office 2003 的創新功能,可讓您輕鬆地從 Office 中研究外部資源。(列印共 18 頁)
下載 GoogleResearchLibrarySource.exe。
注意 本文章中之資訊係依 Office 2003 Beta 2 為基礎。如同以往一樣,資訊可能變更。我已努力維持資訊的正確性,產品發行後本文章中之資訊應也適用。
我的上一個專欄討論的是〈What's New with Smart Tags in Office 2003〉(英文),很高興收到許多正面且熱情的回應,許多讀者對於即將發行的下一版 Microsoft Office (正式名稱為 Microsoft Office 2003) 感到高度興趣,而且迫不及待地想要拿到 Beta 2。建議您隨時瀏覽 Office Developer Center,瞭解如何取得 Beta 2。
我個人已經參與 Beta 版本的開發達數月之久,我可以告訴您,這將是個令人印象深刻的 Office 版本。決定從何切入並不簡單。對於使用者、企業與獨立軟體廠商而言,均有許多令人拭目以待的新功能。因為這些令人興奮的新功能,我打算在接下來的幾個月中,將重點放在此版本 Office 的新功能,以及 Microsoft Office 2003 提供的解決方案類型。
研究參考資料庫簡介
這個月,我將與您分享 Microsoft Office 2003 的秘寶-研究參考資料庫。因為 Office 2003 的功能頗為豐富,研究參考資料庫並非 Office 2003 中唯一值得您注意的功能。您可以從下一版本的 Microsoft Word、Microsoft Excel、Microsoft PowerPoint®、Microsoft Outlook®、Microsoft Publisher、Microsoft OneNote™ 與 Internet Explorer 中使用研究參考資料庫功能。在每個應用程式中,您可以透過工作窗格來存取研究參考資料庫。
研究參考資料庫是什麼?您可以從此功能的名稱來推斷,它是一個內建的研究參考工具,使用者可透過此工具從 Office 中搜尋各種資訊。某些研究參考資源內建於 Office,而其他則以外部服務形式存在,因此您必須能連線到網際網路,才能使用這些功能。[圖 1] 顯示啟用中的內建 [英文同義字 (English Thesaurus)] 研究參考服務。

[圖 1] Microsoft Word 2003 中的 [研究參考 (Research)] 工作窗格
仔細剖析 [圖 1] 中的 [研究參考 (Research)] 工作窗格,我們可以看到下列元素:
- 在大部分支援的應用程式中,您可以按一下 [標準 (Standard)] 工具列上的 [研究參考 (Research)] 按鈕,存取研究參考資料庫。此外,您也可以藉由開啟工作窗格 ( [檢視 (View)] | [工作窗格 (Task Pane)]) 並從可用工作窗格清單中選取 [研究參考 (Research)],藉此存取 [研究參考 (Research)] 工作窗格。
- 開啟 [研究參考 (Research)] 工作窗格後,請在 [搜尋 (Search for)] 文字方塊下輸入搜尋文字。或者,使用者也可以按住 ALT 鍵,並按一下文件中的文字。按住 ALT 鍵並按一下文件中的文字後,Office 應用程式會開啟該工作窗格,並將文字放到 [搜尋 (Search for)] 文字方塊中。
- 接下來,從服務清單中選取搜尋服務。在本文章的其他部分,我將會列舉一些服務。最後,請按一下具有箭頭的 [開始] 綠色按鈕,開始進行搜尋。
- [研究參考 (Research)] 工作窗格提供類似 Web 瀏覽器的 [上一頁 (Back)] 與 [下一頁 (Forward)] 按鈕,可用來檢視上一頁的搜尋。
- [研究參考 (Research)] 工作窗格會顯示搜尋結果。您可以在單次搜尋中使用多種服務,搜尋結果會以搜尋服務的標頭做為分隔。
- [研究參考 (Research)] 工作窗格支援許多控制項類型。在 [圖 1] 中,您可以看到下拉式功能表,您可以使用該功能表將選取的文字插入或複製到目前的文件中。
- 在 [研究參考 (Research)] 工作窗格下方,您可以看到 [研究參考選項... (Research options...)] 連結。此連結可開啟 [研究參考選項 (Research Options)] 對話方塊,如 [圖 2] 所示。

[圖 2] Office 會使用 [研究參考選項 (Research Options)] 對話方塊來設定搜尋服務。
您可以使用 [研究參考選項 (Research Options)] 對話方塊來加入新的研究參考服務、更新現有的服務、修改分級控制,並檢閱已安裝服務的內容。如 [圖 2] 所示,Office 2003 Beta 2 已提供一些研究參考服務。下列清單是這些服務的摘要:
- 本機電腦上的來源
- 同義字與翻譯 (Thesaurus and Translation)
- Office 2003 研究參考服務
- 字典 (Dictionary)
- 百科全書 (Encyclopedia)
- Web 搜尋 (Web Search)
- 股價 (Stock Quotes)
- 協力廠商研究參考服務
- Factiva
- eLibrary
- Gale
- WorldLingo
- 與其他即將加入的新服務
大部分的服務需要網際網路連線,才能使用。若使用者未連線,將無法使用某些服務。需要網際網路連線的研究參考服務可從網路上許多有用的資源提供即時的最新資訊。我最愛的服務之一是「MSN Money 股價 (MSN Money Stock Quotes)」研究參考服務。[圖 3] 顯示在股票行情即時看板 MSFT 上搜尋的結果。

[圖 3] 使用「MSN Money 股價 (MSN Money Stock Quotes)」研究參考服務的範例
比較 [圖 1] 與 [圖 3] 的結果時,您會發現兩種不同的研究參考服務,現在您應該可以瞭解研究參考服務可顯示各種資料類型的彈性。「MSN Money 股價」會顯示格式化的表格、可載入 MSN 網站以製作圖表的超連結,以及名為 [插入股票價格 (Insert Stock Price)] 的按鈕。[插入股票價格 (Insert Stock Price)] 按鈕實際上是個智慧標籤。[研究參考 (Research)] 工作窗格可選用已安裝的智慧標籤,來增加 [研究參考 (Research)] 工作窗格與 Office 應用程式間的互動性。在此範例中,「MSN Money 股價 (MSN Money Stock Quotes)」可插入目前的股價或使用格式化表格來插入目前的股票統計資料。
建立您自己的研究參考資料庫服務
更令人興奮的是,[研究參考 (Research)] 工作窗格是可擴充的。Microsoft 會在推出 Beta 2 與最終上市產品時,一併推出 Office Research 軟體開發者套件 (Software Developers Kit,SDK)。開發人員可使用此 SDK 來整合協力廠商產品與內部系統資訊,獨立軟體廠商也可以使用此 SDK 將其產品線整合到 Microsoft Office 環境中。
在接下來的文章中,我將會討論建立研究參考資料庫服務的基本方式。此範例是以 Google Web API 為基礎,這是一組 XML Web 服務,軟體開發人員可使用此服務,直接從其應用程式中查詢 3 億份以上的 Web 文件。在此範例中,我們將會使用 [研究參考 (Research)] 工作窗格來查詢 Google。如需使用 Google Web API 的詳細資訊,請瀏覽 http://www.google.com/apis/。
Google 研究參考資料庫服務的分析藍本為何?我常需要開啟 Internet Explorer,並連到 Google 搜尋我的文件或電子郵件中的資訊。現在,我可以使用我們即將討論的程式碼範例,在 Office 中直接進行搜尋。我可以按住 ALT 鍵,並按一下電子郵件中的文字。[研究參考 (Research)] 工作窗格會開啟,並自動將我的搜尋文字放到 [搜尋 (Searsh for)] 文字方塊中。接著,我選取 [Google Web 搜尋 (Google Web Search)] 服務,並按下 [開始 (Go)]。接下來,[研究參考 (Research)] 工作窗格會顯示搜尋結果。在我按下其中一個搜尋結果後,瀏覽器便會載入該網站。請參閱 [圖 4],檢視 [Google Web 搜尋 (Google Web Search)] 研究參考資料庫的搜尋結果。

[圖 4] [Google Web 搜尋 (Google Web Search)] 研究參考資料庫搜尋結果
本文章隨附的下載檔案包含已在 Office 2003 Beta 2 測試的「Google Web 搜尋 (Google Web Search)」研究參考資料庫服務。版本計有兩種,一種是以 C# 撰寫,另一種是以 Visual Basic® .NET 撰寫。除了使用的語法不同之外,其餘都是一樣的。值得注意的是,我先使用 C# 撰寫,然後將它轉換為 Visual Basic .NET,轉換過程只花了 10 分鐘左右。因此,您可以發現在不同的開發語言間遊走並不是難事。為了節省空間,在本文章中,我主要會使用 C# 程式語法範例來解說。
最後,若要存取 Google Web API 服務,您必須建立 Google 帳號,並取得免費的授權碼。您的 Google 帳號與授權碼一天可搜尋 1,000 個自動化的查詢。您可以從 http://www.google.com/apis/ 要求此授權碼。此過程需要數分鐘時間才能完成。接著,根據您將使用的程式碼語言版本,開啟 web.config 並變更 GoogleKey 自訂屬性。以下顯示字典及語言版本:
<<Unzip Directory>>\GoogleResearchLibraryCSharp - C# Version
<<Unzip Directory>>\GoogleResearchLibraryVBNet - VB.NET Version
將您從 Google 取得的授權碼放到值屬性中:
<add key="GoogleKey" value="[INSERT YOUR KEY HERE - SEE README]"/>
例如,修改後的 XML 節點看起來應該像這樣:
<add key="GoogleKey" value="abc123ThisIsAMadeUpKeyxyz/abc"/>
如需其他安裝步驟,請參閱隨附的 README.DOC 檔案。
研究參考資料庫架構基礎
研究參考資料庫主要由 XML Web 服務 (具有兩個 Web 方法) 所組成。這與許多其他 Office 擴充性模組相異其趣。在過去,擴充 Office 功能通常需要在用戶端安裝某些元件。研究參考資料庫服務是標準 XML Web 服務,不需要任何用戶端程式碼,除非您計畫使用智慧標籤 (此為選用選項,大多數研究參考資料庫不需要智慧標籤)。使用 Visual Studio® .NET 或其他已啟用 XML Web 服務的平台時,您可以建立一組 Web 服務,它可在伺服器上執行,並透過預先定義的介面與 Office 溝通。擷取自 Office Research SDK 的 [圖 5] 展示 Office 與研究參考資料庫 XML Web 服務間的溝通流程。

[圖 5] Office 與研究參考資料庫 XML Web 服務之間溝通流程的圖解。
- 使用者選取 [研究參考選項 (Research Options)] 對話方塊 (圖 2) 中的 [新增服務 (Add Service)]。使用者提供研究參考資料庫服務之 [註冊 (Registration)] 頁面的連結。註冊頁面上有個名為 Registration() 的 Web 方法。
- Registration() 會傳回研究參考服務之提供者的相關資訊、服務類型,以及搜尋時所使用之 Query() Web 方法的服務類別與指標。現在,可以使用服務了。
注意 您可能會認為使用者需進行太多工作,他們可能不想一步一步費事地新增服務。關於這點,有其他選項可解決: (1) 您可以部署安裝檔案,自動安裝研究參考資料庫的適當登錄項目,或 (2) Office 包含探索機制,可新增並更新研究參考資料庫服務。組織部署 Office 2003 時,可以在安裝程式中包含指標,探索 XML Web 服務。這樣一來,可以從桌面自動加入新服務,而不需要使用者介入。
- 使用者從研究參考資料庫發出的要求會送到將存取之研究參考資料庫服務的 Query() Web 方法。
- Query() 方法會剖析要求,並產生回應。回應會送回 Office 並顯示結果。
Office 與研究參考 XML Web 服務的溝通必須符合 Office Research SDK 中定義的 XML 結構描述。例如,以回應結構描述為基礎的註冊回應封包看起來會像這樣:
<?xml version="1.0" encoding="utf-8"?>
<ProviderUpdate xmlns="urn:Microsoft.Search.Registration.Response">
<Status>SUCCESS</Status>
<Providers>
<Provider>
<Message>This is a sample research library </Message>
<Id>{9FF837AF-34D6-4a94-BB52-B0F19F3A343A}</Id>
<Name>OfficeZealot.com</Name>
<QueryPath>
http://localhost/googleresearchlibrarycsharp/Query.asmx
</QueryPath>
<RegistrationPath>
http://localhost/googleresearchlibrarycsharp/registration.asmx<
</RegistrationPath>
<AboutPath/>
<Type>SOAP</Type>
<Services>
<Service>
<Id>{CD144577-9D90-4144-AE38-0D6553CA4004}</Id>
<Name>Google Web Search (CSharp)</Name>
<Description>Google Web Service research library</Description>
<Copyright>All content Copyright OfficeZealot.com (c)
2003.</Copyright>
<Display>On</Display>
<Category>RESEARCH_GENERAL</Category>
</Service>
</Services>
</Provider>
</Providers>
</ProviderUpdate>
使用者安裝研究參考資料庫服務時,此資訊會傳回給使用者。它也包含 Office 與遠端伺服器上之研究參考資料庫服務溝通時所需的資訊。
探究 XML Web 服務
如前所述,研究參考資料庫主要是由具有兩個 Web 方法的 XML Web 服務所組成。這兩個 Web 方法可以共存在一個 Web 服務檔案中。然而,我偏好在邏輯上與實際上將它們分割,以簡化程式碼。因此,「Google Web 服務」研究參考服務具有兩個關鍵檔案:
- Registration() 方法的 Registration.asmx Web 服務檔案。
- Query() Web 方法的 Query.asmx Web 服務檔案
Office 預期這些 Web 方法根據研究參考資料庫結構描述與其關聯的命名空間來回應。因此,必須使用回應的適當命名空間 (亦即 urn:Microsoft.Search) 來定義每個 XML Web服務。在 C# 中,您會使用下列屬性來定義 Web 服務:
[WebService(Namespace="urn:Microsoft.Search")]
就 Visual Basic .NET 而言:
<WebService(Namespace:="urn:Microsoft.Search")>
這會告知 .NET Framework 將 SOAP 訊息本文封裝在 urn:Microsoft.Search 命名空間中。
下列是儲存在 Registration.asmx.cs 中的 Registration() Web 方法的 C# 程式碼部分
[WebMethod(CacheDuration=86400)] //Cache this for a full day, this rarely
changes (86400 seconds = 24 hours)
public string Registration(string registrationxml)
{
string physicalPath =
HttpContext.Current.Server.MapPath(".").ToString();
string httpPath =
ConfigurationSettings.AppSettings["ServerPath"]
+ HttpContext.Current.Request.ApplicationPath + "/";
XmlDocument registrationResponse = new XmlDocument();
registrationResponse.Load(physicalPath +
"\\RegistrationResponse.xml");
XmlNamespaceManager nsm =
new XmlNamespaceManager(registrationResponse.NameTable);
nsm.AddNamespace("ns", "urn:Microsoft.Search.Registration.Response");
registrationResponse.SelectSingleNode("//ns:QueryPath", nsm).InnerText =
httpPath + "Query.asmx";
registrationResponse.SelectSingleNode("//ns:RegistrationPath",
nsm).InnerText = httpPath + "Registration.asmx";
registrationResponse.SelectSingleNode("//ns:AboutPath", nsm).InnerText =
httpPath + "about.asmx";
return registrationResponse.InnerXml.ToString();
}
註冊回應非常簡單,它只定義研究參考資料庫服務的相關資訊。程式碼會載入名為 RegistrationResponse.xml 的本機 XML 檔案,此檔案是做為回應的整體樣板使用,它會插入 Runtime 時決定的其他資訊。此資訊會傳回到 Office。
下列是 Query() Web 方法的程式碼,以及它的其中一個私用函式:
[WebMethod(CacheDuration=3600)] //Cache for 1 hour
public string Query(string queryXml)
{
//Verify that a query value has been specified
if (queryXml.Length == 0)
return "";
string queryString;
string applicationName;
int startAt = 1;
XmlDocument requestXml = new XmlDocument();
try
{
requestXml.LoadXml(queryXml.ToString());
XmlNamespaceManager nsmRequest =
new XmlNamespaceManager(requestXml.NameTable);
nsmRequest.AddNamespace("ns", "urn:Microsoft.Search.Query");
nsmRequest.AddNamespace("oc",
"urn:Microsoft.Search.Query.Office.Context");
queryString = requestXml.SelectSingleNode("//ns:QueryText",
nsmRequest).InnerText;
applicationName = requestXml.SelectSingleNode("//oc:Name",
nsmRequest).InnerText;
try
{
startAt = Convert.ToInt32(requestXml.SelectSingleNode("//ns:StartAt",
nsmRequest).InnerText.ToString());
}
catch
{
startAt = 1;
}
}
catch
{
//Parsing queryXML has failed, use the input string for the google search
queryString = queryXml;
}
XmlDocument responseWrapper = new XmlDocument();
try
{
responseWrapper.Load(physicalPath + "\\ResponseWrapper.xml");
}
catch
{
//Cannot parse the response body wrapper, return nothing
return "";
}
XmlNamespaceManager nsmResponse =
new XmlNamespaceManager(responseWrapper.NameTable);
nsmResponse.AddNamespace("ns", "urn:Microsoft.Search.Response");
responseWrapper.SelectSingleNode("//ns:Range",nsmResponse).InnerXml =
QueryGoogle(queryString, startAt);
return responseWrapper.InnerXml.ToString();
}
private string QueryGoogle(string queryString, int startAt)
{
StringWriter queryResponse = new StringWriter();
XmlTextWriter writer = new XmlTextWriter(queryResponse);
GoogleSearchService search = new GoogleSearchService();
try
{
// Invoke the search method
GoogleSearchResult results =
search.doGoogleSearch(ConfigurationSettings.AppSettings["GoogleKey"] ,
queryString, startAt, PageCount, true, "", true, "", "", "");
//Elements for Previous | Next links
writer.WriteElementString("StartAt",startAt.ToString());
writer.WriteElementString("Count",PageCount.ToString());
writer.WriteElementString("TotalAvailable",
results.estimatedTotalResultsCount.ToString());
//Start Results Element
writer.WriteStartElement("Results");
//Start Content Element
writer.WriteStartElement("Content",
"urn:Microsoft.Search.Response.Content");
//Insert Image
writer.WriteStartElement("Image");
writer.WriteAttributeString("source", httpPath + "/gLogo.gif");
writer.WriteEndElement();
foreach(ResultElement result in results.resultElements)
{
writer.WriteStartElement("Heading");
writer.WriteAttributeString("collapsible","true");
if (result.title.Length> 0)
writer.WriteElementString("Text",
StripHtml(result.title).Trim());
else
writer.WriteElementString("Text", "No Title");
if (result.snippet.Length > 0)
writer.WriteElementString("P",
StripHtml(result.snippet));
if (result.summary.Length>0)
{
writer.WriteStartElement("P");
writer.WriteStartElement("Char");
writer.WriteAttributeString("light", "true");
writer.WriteString("Description: ");
writer.WriteEndElement();
writer.WriteString(StripHtml(result.summary));
writer.WriteEndElement();
}
writer.WriteStartElement("Hyperlink");
writer.WriteAttributeString("url", result.URL);
writer.WriteElementString("Text", result.URL);
writer.WriteEndElement();
writer.WriteEndElement(); //Heading
}
writer.WriteElementString("HorizontalRule","");
writer.WriteStartElement("Hyperlink");
writer.WriteAttributeString("url",
"http://www.google.com/search?q=" + queryString);
writer.WriteElementString("Text",
"Continue your search at Google.com ...");
writer.WriteEndElement();
writer.WriteStartElement("Hyperlink");
writer.WriteAttributeString("url",
"http://groups.google.com/groups?q=" + queryString);
writer.WriteElementString("Text",
"Search at groups.Google.com ...");
writer.WriteEndElement();
//Overview of search results
writer.WriteElementString("P", "Search took " +
Math.Round(results.searchTime,2).ToString() + " seconds.");
writer.WriteElementString("HorizontalRule","");
writer.WriteStartElement("Image"); //Insert OZ logo Image
writer.WriteAttributeString("source", httpPath + "/oz15owide.gif");
writer.WriteEndElement();
writer.WriteEndElement(); //Close Content element
writer.WriteEndElement(); //Results Content element
writer.Close();
return queryResponse.ToString();
}
catch (System.Web.Services.Protocols.SoapException ex)
{
return "";
}
}
使用者透過 [研究參考 (Research)] 工作窗格要求資訊時,會根據查詢要求的結構描述來封裝要求。接著,此資訊會傳遞到 Query() Web 方法,並可在 queryXml 參數中剖析。Query() 會從 queryXml 擷取搜尋文字,並將搜尋文字轉送給 QueryGoogle() 函式。
QueryGoogle() 實際上會完成此解決方案的主要工作。它會呼叫 Google Web 服務 API,並使用搜尋文字做為輸入參數。Google 傳回的回應會經過剖析,並根據研究參考資料庫結構描述來重新封裝。下列 XML 封包是 [圖 4] 所示之回應的範例:
<?xml version="1.0" encoding="utf-8"?>
<ResponsePacket revision="1" xmlns="urn:Microsoft.Search.Response">
<Response domain="{CD144577-9D90-4144-AE38-0D6553CA4004}">
<Range>
<StartAt>1</StartAt>
<Count>2</Count>
<TotalAvailable>738</TotalAvailable>
<Results>
<Content xmlns="urn:Microsoft.Search.Response.Content">
<Image source="http://localhost/GoogleResearchLibraryCSharp//gLogo.gif"/>
<Heading collapsible="true">
<Text>Smart Solutions Opinion</Text>
<P>Office as Swiss Army Knife. Chris Kunicki.. </P>
<Hyperlink url="http://www.msofficemag.net/opinion/default.asp?sort=W&Ord=A">
& lt;Text>http://www.msofficemag.net/opinion/default.asp?sort=W&Ord=A</Text>
</Hyperlink>
</Heading>
<Heading collapsible="true">
<Text>What's New with Smart Tags in Office 11</Text>
<P>Rate this page: 4 users, 3.8 out of 5. Read User ... </P>
<Hyperlink url="http://msdn.microsoft.com/columns/office.asp">
<Text>http://msdn.microsoft.com/columns/office.asp</Text>
</Hyperlink>
</Heading>
<HorizontalRule/>
<Hyperlink url="http://www.google.com/search?q=Chris Kunicki">
<Text>Continue your search at Google.com ...</Text>
</Hyperlink>
<Hyperlink url="http://groups.google.com/groups?q=Chris Kunicki">
<Text>Search at groups.Google.com ...</Text>
</Hyperlink>
<P>Search took 0.19 seconds.</P>
<HorizontalRule/>
<Image source="http://localhost/GoogleResearchLibraryCSharp//oz15owide.gif"/>
</Content>
</Results>
</Range>
<Status>SUCCESS</Status>
</Response>
</ResponsePacket>
Query.asmx 會大量使用 XMLTextWriter 物件。此物件會提供高效率且輕量級的方式來建構格式完整的 XML 文件。因為來自 Query 介面的回應是以結構描述結構化 XML 為基礎,您必須擁有格式完整的 XML 文件,否則 [研究參考 (Research)] 工作窗格將會顯示空白窗格。下列範例展示 XMLTextWriter 物件的用法:
writer.WriteStartElement("P");
writer.WriteStartElement("Char");
writer.WriteAttributeString("light", "true");
writer.WriteString("Description: ");
writer.WriteEndElement();
writer.WriteString(StripHtml(result.summary));
writer.WriteEndElement();
建立下列 XML:
<P><Char light="True">Description: information from google</Char></P>
第一次看到時,您可能會認為需要許多程式碼才能建立簡單的 XML 字串。但傳統的回應封包需要 50-100 行的 XML。管理一般字串處理常式可能非常麻煩。XMLTextWriter 物件不僅提供一種節省記憶體的方式來建構此 XML 回應封包,建立與管理程式碼也非常簡單。
實作注意事項
如同您可以想到的一樣,我們僅進行可能的處理。身為採用此新技術的先驅,我會在後面幾個段落中分享一些建立研究參考工作窗格的經驗。
此經驗類似於學習 HTML,因為研究參考資料庫是透過 Microsoft 所定義之 XML 架構加以格式化的 Web 服務回應。我大約花了兩天的時間,瞭解研究參考資料庫結構描述的語法規則。雖然使用 [研究參考資料庫 (Research Library)] 工作窗格與使用內嵌瀏覽器非常類似,但它並沒有瀏覽器的彈性。您無法設定背景色彩,對於文字與圖像的版面配置,您只具備有限的控制能力。此外,並沒有用戶端指令碼可使用。即使如此,當您瞭解語法所允許的規則後,您會發現可進行的動作仍然不少。
另一個有趣的地方是,您必須學習如何處理有限的畫面資源。您能控制的區域寬度大約只有 100-200 像素。因此,您必須學習如何有效率地呈現資訊。這有點像是設定 PDA 的格式,因為他們的外觀類似。
使用 .NET Framework for XML Web 服務的優點之一是優越的內建快取技術。藉由新增下列屬性到 Response() Web 方法,可獲得不常變更的註冊回應快取:
[WebMethod(CacheDuration=86400)] //Cache this for a full day, this rarely
changes (86400 seconds = 24 Hours)
public string Registration(string registrationxml)
我也將它套用到 Query() 方法,並設定快取時間為 1 個小時,如下列程式碼所示:
[WebMethod(CacheDuration=3600)] //Cache for 1 hour
public string Query(string queryXml)
此外,我們應如何為研究參考資料庫進行偵錯?如上所述,為研究參考資料庫進行偵錯與為 HTML 瀏覽器應用程式進行偵錯非常類似;然而,在這個範例中,瀏覽器變成 Office 用戶端。在 Web 方法中設定要進行偵錯的中斷點,然後開啟偵錯功能並執行專案。Visual Studio .NET 將會啟動一份 Internet Explorer 的執行個體,並以偵錯模式執行程式碼。維持 Internet Explorer 視窗的開啟狀態,並切換到您正在測試的 Office 應用程式。開始透過研究參考資料庫執行搜尋要求後,Visual Studio .NET 會在中斷點處暫停。
最後,還有一些您需要注意的事項:
- 研究參考資料庫支援透過表單語法來收集更豐富的資訊集。
- 也支援 https:// 安全連線。
- 研究參考資料庫支援 Windows 驗證。
- Cookie 支援:
- 可以寫入由瀏覽器識別的 Cookie。
- 與 Internet Explorer 共用永久性 Cookie。
Chris Kunicki 與客戶、設計師、與工程師協同合作在 OfficeZealot.com 建立桌上型、企業與 Web 應用程式。Chris 長期研究 Office 應用程式的開發設計,並持續對使用者與開發人員宣傳 Office 是建立解決方案的重要平台。您可以透過下列電子郵件與他連絡:chris@officezealot.com。到他的網站瞭解他的想法:mailto:http://www.officezealot.com。