初試啼聲 – 利用 Visual FoxPro 建立 Web Services

本文轉譯自VFP7光碟片 \technical articles\vfpws.doc

McAlister Merchant
Microsoft Corporation
Created: March 2001
Revised: March 2001
Applies To: Microsoft Visual Foxpro

總覽

Web Services 可以在任何地方被使用.你可以自己建立他們,或者你可以在他們被公佈的地方存取他們.
你可以使用VFP去建立 Web Services, 而且如果你在IntelliSense中註冊他們,VFP使得你能近乎自動化地存取他們變的可能.
你也可以使用VFP存取利用其他語言建立的 Web Services.

內容

介紹
Web Services
Establishing a Virtual Directory (建立一個虛擬目錄)
Creating a Project (建立專案)
Creating a COM Server (建立一個COM伺服器)
Creating and Publishing a Web Service (建立並發布一個 Web Service)
Registering a Web Service (註冊一個 Web Service)
Using a Web Service (使用一個 Web Service)
更多資訊
譯註

 

介紹

使用VFP建立 Web Services 是一個複雜的過程,因為牽涉到使用IIS, VFP COM伺服器和SOAP.
你使用IIS去建立一個虛擬目錄來參照到你的Service擺放在硬碟上的位置.
IIS可以利用MS NT4 Option Pack, MS W2k Professional或MS W2K Server來安裝.(在Option Pack中,IIS是其中的一部份,在W2K
Pro中可以利用新增/移除來安裝,W2K Server則是安裝時會自動一併安裝).譯註1.
然後你可以使用專案管理員去建立或編譯COM物件.當COM物件被建立了,你可以使用VFP Web Services精靈把他們公佈到你的虛擬目錄中.
你可以利用VFP的IntelliSense管理員去註冊 Web Services,所以Web Service的佈置和程式碼中必要呼叫的常式能迅速被執行.
這篇文章引領你為現存的COM伺服器建立Web Serveice並且準備Web Service以使用的這個複雜過程.
你能從一個COM伺服器建立一個簡單的Web Service,讓任何人都能從HTTP協定上存取.
這個 Web Service 提供一個關於目前目錄和有多少檔案在目錄中的簡單報告.

Web Services

Web Services延展了你自己的COM伺服器的可存取能力,能夠使得其他開發者能透過瀏覽器來存取.
Web Services提供機能並且能跨平台和在異質連接中存取資料.
你可以從Web Service存在的地方建立並使用Web Services去提供或者獲得功能.(譯註2)
大部分Web Service重要的觀點是Web Services使用HTTP協定和SOAP代理人,因此功能可以在跨越防火牆之後,仍然有效.
因為HTTP和SOAP是不管平台的,所以Web Services也是不管平台的.在某些案件,這仍能在COM失效的時候提供功能.
要發布一個 Web Service, 你必須在IIS中建立一個虛擬目錄,然後建立或複製一個COM伺服器,從而產生一個Web Service到你的虛擬目錄中.

 

Establishing a Virtual Directory(建立一個虛擬目錄)

你必須建立或識別一個目錄以存放你的 Web Services.
儘管你可以使用一個已存在的目錄,你仍可能想要在你硬碟上建立一個不一樣的地方存放這些檔案以方便管理你的Web Service檔案.
去建立一個虛擬目錄,譯註3
1.在VFP主要目錄下(\Program Files\Microsofft Visual FoxPro 7)建立一個資料夾,並命名為 Web Services.
2.在控制台裡的系統管理工具資料夾中,雙擊Internet服務管理員.
3.Internet服務管理員視窗打開,在左邊會顯示一個樹狀目錄,他顯示了你的硬碟.展開節點,以便能看到子資料夾.
4.在樹狀目錄中選擇預設的Web站台.
5.從右擊選單中,選擇"新增",然後點選"虛擬目錄".這會開啟"虛擬目錄新增精靈".
6.遵循精靈的指示進行,選擇虛擬目錄的時候,指定到步驟一所建立的 Web Services 資料夾.
你已經建立了一個虛擬目錄,參照到你的Web Services資料夾,之後你將會在這裡存放你建立的所有Web Services檔案.

 

Creating a Project (建立一個專案)

專案管理員在VFP中是十分基礎的應用程式建立工具.
在VFP專案中,你可以組合各式各項的文件,資料,類別,程式碼和其他類型的檔案等.
一個專案提供了你可能想要含括到一個伺服器中的所有元件,並且容納,以便編輯.
在這個範例中,你使用專案去編譯你的 Web Services
去建立一個專案,譯註4
1.在File(檔案)選單中,選擇 New(開新檔案)
2.在New(開新檔案)的對話盒中選擇 Project(專案),並點選 New File(開新檔案).
3.在 Create(建立)對話盒中,選擇你之前建立的 Web Services 資料夾,並且取名為 myWServ1.
4.點選 Save(存檔)
現在你已經在 Web Services 資料夾中建立了你的專案.這使得當你完成加入元件後可以在正確的資料夾中自動的儲存並編譯.

 

Creating a COM Server(建立一個COM伺服器)

因為,一個Web Service是一個.dll或.exe的檔案,你必須使用一個COM伺服器來當作你Web Service的基礎.
一個COM伺服器在VFP來說是一個有.dll或.exe副檔名,裡面包含從一個利用OLEPUBLIC識別字所建立的類別.
當一個物件被指定為OLEPUBLIC時,表示可以被Automation客戶端存取.當你從.dll檔案發布Web Service時,一個新的.wsdl檔案將會被產生.
.wsdl檔案有必要的XML源碼,他描述在.dll檔中的類別和參照實際在Web Service背後出力的.dll檔案.
從這個COM伺服器範例中,你將建立一個custom類別,他簡單回報了一些非常簡單的訊息.
在這個過程中,你將要寫一個程式來建立一個包含兩個方法的類別,並且編譯這個專案成一個COM伺服器和一個已發布的Web Service.
去建立一個簡單的類別,譯註5
1.在File(檔案)選單中,選擇New(新增).
2.在New(開新檔案)對話盒中,選擇Project(專案),並點選New file(開新檔案).這會開啟Project Manager(專案管理員).
3.在Project Manager(專案管理員)的All(所有)頁籤中,將Code(程式)展開,選擇Programs(程式碼),然後選擇New(開新檔案).
4.將下列的程式碼複製到程式碼編輯視窗中.
*– returns curdir() and number of JPEG files

DEFINE CLASS showem AS session OLEPUBLIC

Name = "showem"

PROCEDURE justshow
howmany=ADIR(afilArry,"*.jpg")
IF howmany <1
fileNm="no"
ELSE
fileNm=ALLTRIM(STR(howmany))
ENDIF

X = "about " + CURDIR() + " … "
Y = "There are " + fileNm + " JPEG files here."
RETURN x + y
ENDPROC
ENDDEFINE

這個程式定義了一個類別 showem,他有一個方法 justshow
5.關閉編輯視窗,並在Save As(另存新檔)對話盒中,將程式命名為myWServ1,並點選存檔.
6.確定 myServ1 設定為主程式.(如果他被設定為主程式,他將會以粗體呈現).如果沒有,在Project Manager(專案管理員)中,以滑鼠右鍵點選myWServ1並在快捷選單中選擇Set
Main(設為主程式).

 

去編譯這個COM伺服器

1.在Project Manager(專案管理員)中,選擇 Build (建立)
2.選擇 Single-threaded COM Server
3.選擇 Ok, 並接受名稱為 myWServ1
VFP將會編譯這個myWServ1檔案為一個COM伺服器,之後你就可以將這個COM伺服器轉為Web Service.

 

Creating and Publishing a Web Service(建立並發布一個Web Service)

必要地加入一個元件並且編譯COM伺服器,才能將你的COM伺服器轉為Web Service, 當成一個 Web Service發布.譯註6
在你指定完這些設定,VFP會建立必要的XML和SOAP檔案以將你的伺服器轉為一個 Web Service,註冊你的新 Web Service,並發布到你的虛擬目錄中.
去編譯和發佈一個Web Service
1.在你完成前一個步驟,並且編譯好COM伺服器myWServ1.dll,以滑鼠右鍵點選Project Manager(專案管理員),並從快捷選單中選擇Builder.
2.在Wizard Selection(精靈選擇)對話盒中,選擇Web Services Publisher,然後按下 Ok.
3.在VFP Web Services Publisher對話盒中,使用 Ellipsis 按鈕去找到 myWServ1, 然後選擇你想要從伺服器中註冊的類別.在這個你建立的COM伺服器中,myWServ1,你只有一個類別
showem
Note 點選 Advance(進階)按鈕以確定Web Services Publisher對話盒參照到正確的檔案是一個不錯的主意,特別是如果你建立了相似名稱的伺服器或者服務在不同資料夾的時候.如果正確的檔案沒有被顯示在下拉清單中,使用
Ellipsis 按鈕(…)去找到正確的檔案.
IntelliSense scripts 欄位下方顯示了你(和SOAP toolkit)將找到的名稱.在Advance Web Services Publisher對話盒中確認了資訊之後,點選Ok
譯註7.
4.點選Generate(產生)按鈕
在VFP產生Web Service檔案後, Web Services Publishing Results對話盒會出現,顯示包含COM伺服器,.wsdl檔案,ISAPI或ASP
listener和IntelliSense路徑名稱和編輯結果的清單.
到了這裡,你已經建立和發布你的Web Service.任何存取到你早先所建立的這個虛擬目錄,就能使用HTTP去存取你剛剛建立的Web Service.
要使用這個Web Service,你必須撰寫SOAP用戶端,一個listener(傾聽者)和瀏覽器的程式碼並且必須利用好幾個協定的層級和過程.
在VFP裡面,只要藉著在IntelliSense管理者中註冊Web Service就能簡化許多.

 

Registering a Web Service(註冊一個Web Service)

你可以在IntelliSense管理者中註冊Web Services(你所建立的或被其他人建立的).
當你做完,IntelliSense在你存取一個已註冊的Web Service時會提供了支援的程式碼.

去註冊一個Web Service
1.在 Tools(工具)選單,選擇IntelliSense Manager.
2.在IntelliSense Manager的Types頁籤,按下Web Services按鈕以註冊你新的Web Services(你的新類別也將會出現在Types清單中)
現在,當你加入一個強制型別的變數到你的VFP程式碼中時,IntelliSense將會提供你的Web Services如同一個非必要的選擇.
譯註8

 

Using a Web Service(使用一個Web Service)

使用Web Service就跟你想要一個應用程式的任何COM伺服器把功能公開出來給另一個應用程式或程式一樣.
舉例來說,你可以建立一個呼叫範例Web Service, myWServ1,的VFP程式.
在一個VFP程式中,宣告一個強制型別的變數,如同下列的程式碼一樣,藉著從IntelliSense下拉選單中可以參照到你的Web Service, myServ1.
LOCAL x AS myWServ1
VFP IntelliSense使用這個Web Service已註冊的資訊,去完成下列的程式碼:
x = CREATEOBJECT("MSSOAP.SoapClient")
x.MSSoapInit("http://TheVirtualDisk/web services/myWServ1.WSDL", ,
" myWServ1SoapPort")
然後,你可以像以前呼叫COM物件或類別的方法一樣去呼叫,就像下列的程式碼一樣:
? x.justshow()
譯註9
你可以加入相似的程式碼到VFP程式或應用程式中,去存取你自己的或其他Web Services.

 

更多資訊

要取得更多關於Web Services的資訊,請看VFP輔助說明中的 "Web Services Overview".
要取得更多關於COM伺服器的資訊,請看VFP輔助說明中的 "Creating Automation Servers".

Text for description meta tag:VFP使得從COM伺服器建立Web Services變的可能.

KeyWords(關鍵字):VFP Web Services, creating; VFP, creating Web Services;VFP, Web
Services.

 

譯註

譯註1:此句翻譯的不好,本來只有一句,但我切成兩句.
譯註2:此句也翻譯的不好.意思有到了.
譯註3:這邊的步驟,我都照做一次,並將原有的英文W2k上的字眼換成中文w2k上的字眼.
譯註4:因為我的VFP7是英文版的,所以我使用英文的字,不用中文的
譯註5:如果你前面有建立專案的話,就不需要再建立了,直接從步驟三開始吧.
譯註6:這句翻的非常不好,附上原文: To add the components necessary to turn your COM server into
a Web Service, you must compile the COM server as a Web Service.
譯註7:此處務必要自己玩過一遍,盡量多按一按,因為這邊寫的不是很清楚.
譯註8:如果你之前為虛擬目錄取名為 "Web Services" 時,會出現錯誤,因為他不允許名稱中間有空白!!
譯註9:這段程式碼讓我花了一些時間去測試,不過錯誤原因在於我自己在建立並發布Web Services的時候,選擇了以ASP的方式產生,後來改為ISAPI的方式產生就ok了.