WSS 3.0【開發誌】03 初體驗:在本機使用Web Services

WSS 3.0【開發誌】03 初體驗:在本機使用Web Services

還記得在開發誌01提到如果要進行Remote開發,必須使用Web Services嗎?今天就來實作Web Services吧,不過,想說Web Services沒寫過,還是先從本機開始好了,又瞪了SDK許久,在網路上找了許多文章,想看看怎麼樣可以做出開發誌01的結果,最後,只好將就使用Webs的GetWeb Method來做出今天的主題…因為…看了半天這個比較好懂… Orz

本篇您將學會:

A. 如何引用WSS Web Service

B. 如何使用【物件瀏覽器】加速與協助開發

C. System.Xml 與System.Net namespace的引用

D. Web_Reference_Folder_Name是什麼

E. Web Service的開發、驗證、XmlNode與GetWeb Method的使用

A. 引用WSS Web Service

1. 從Files > 建立專案 > 建立一個【Console Application】專案,接著在【References】右鍵點選【加入Web參考】。

image

2. 在【URL】處輸入Web Service的URL,輸入的語法是【
            http://主機名稱/_vti_bin/webs.asmx
            】,
小弟這邊是輸入 h
            ttp://wsscht/_vti_bin/webs.asmx
就在這個簡單的步驟,小弟又卡了很久,因為SDK的Web Service是寫 
http://MyServer/[sites/][MySite/][MySubsite/]_vti_bin/Web_Service.asmx ,是小弟會錯意嗎? 
就輸入.../Web_Servcies.asmx,想說怎麼會發生錯誤…最後跑到ISAPI/的vtb_bin資料夾下, 
看到了所有的.asmx檔發現沒這個,姑且試試Webs.asmx才成功… 

              image
             

3. 小弟將Webs往下拉,找到GetWeb這個Method點進去看,有看沒有懂…

image

4. 點選【服務描述】,在 "Webs" 描述裡面,這個就比較親切了,至少看得懂GetWeb(webUrl AS string)這一串,透過這樣,大概可以了解這個Web Service提供了哪些方法可用,又要如何使用…

image

5. 最後在【Web參考名稱】更名為WssWebService,預設會以主機名稱,改不改應該無所謂;更改完畢後點選【加入參考】。

image

B. 使用【物件瀏覽器】加速與協助開發

6. 加入完成後,可以看到多了一個【Web References】的資料夾,裡面有一個【WssWebService】的參考。

image

7. 雙擊WssWebService,可以打開如圖左的【物件瀏覽器】,在物件瀏覽器中,可以專案使用的namespace,例如System.Web.Services

image

8. 除此,還可以看到專案名稱與專案名稱下的namespace,如本專案的Web Service namespace: 【WSSCode_03_PrintSiteViaWebServices.WssWebsService】。

image

9. 展開PrintSiteViaWebServices.WSSWebsService,看到了所要引用的【Webs】Class並點選,在右邊的視窗就會帶出Webs這個Class所包含的Method;這邊點選Method【GetWeb(string)】,又可以在下方看到這個Method使用的說明…

image

10. 如果再雙擊GetWeb(string),可以打開Reference.cs視窗,可以看到更多詳細的資訊。所以,透過步驟6到步驟10的這個過程,開發時如果遇到了不知道該使用哪些Class或甚麼樣的Method,以及該如何使用Method等問題時,除了查閱SDK或在網路上搜尋資料外,這種找尋Class或Method的方法,或許可以幫您節省一點時間。好,接下來要來真的了,來完成這支程式吧!

image

C. System.Xml 與System.Net namespace的引用

11. 要使用GetWeb Method,SDK上寫得很清楚:This example requires that a using (Visual C#) or Imports (Visual Basic) directive be included for the System.Xml namespace. 所以我們得先加一個System.Xml namespace。

image

12. 而在 Talk to SharePoint Through its Web Services 這篇文章中提到:The SharePoint web services only accept calls from existing SharePoint users and do also enforce access security. Import the System.Net namespace into your project and then use the NetworkCredential class to set the user credential to use for the web service call. 所以記得加上System.Net namespace。

D. Web_Reference_Folder_Name是什麼

13. 加了System.Xml namespace後,來加程式碼吧!

SDK上寫著宣告的方法是這樣:Web_Reference_Folder_Name.Webs websService = new Web_Reference_Folder_Name.Webs();

這個Web_Reference_Folder_Name是甚麼?就是我們所命名的【Web參考名稱】,如果點選Web名稱,可以在【屬性】視窗中,看到【Folder Name】,這就是Web_Reference_Folder_Name了。

image

E. Web Service的開發、驗證、XmlNode與GetWeb Method的使用

14. 輸入Web參考名稱時,如下圖只輸入了Wss,Visual C#的IntelliSense…自動幫我們帶出【{}WssWebServcie】參考名稱,且在後頭會提示namespace資訊,當我們要使用的物件被選取到時,只要輸入任意鍵,此物件程式碼就會直接顯示在程式碼中。

image

15. 接著輸入【Webs】這個Class,同樣可以使用IntelliSense…

image

16. 當進行宣告時,Webs這個class顯示整個Class物件的…

image

17. 接下來在第二行進行websService的驗證。

image

18. 在websService的後面,接著打Credentials,這時可以看到Credentials使用的提示,照著SDK的範例直接使用System.Net.CredentialCache.DefaultCredential。

Talk to SharePoint Through its Web Services 所使用的範例是:VersionsService.Credentials = new NetworkCredential(UserName, Password, Domain); 這邊記錄一下!

image

19. 完成了驗證之後,繼續下面的程式碼囉;由於是使用Console,所以後面有些許跟SDK不一樣。

XmlNode myNode = websService.GetWeb("http://wsscht");

Console.WriteLine(

"My site title is : {0}", myNode.Attributes["Title"].Value);

Console.ReadLine();

image

20. 執行後可以看到網站名稱WSS被列印出來了!

image

21. 對照一下看看有沒列印錯誤…

image

呼~~~終於完成囉,這篇整理好久,希望看官滿意…XD

下一篇來進行Search客製化,使用KeywordQuery關鍵字查詢…