用vfp編寫Web Service(二)

來源:互聯網
上載者:User

發布Web Service

在IIS中建立虛擬目錄

這個步驟很簡單,建立一個虛擬目錄。設定好以後的屬性頁面是:


圖一

這裡我只設定了兩個屬性,其他保持預設狀態。設名稱為:First_web_service,設本地路徑為DLL所在路徑,這裡是:D:\VFP7_Web_Service。

在Visual FoxPro 裡發布 Web Service

工具-〉嚮導-〉Web Services

圖二

彈出如下介面:

圖三

這裡,COM Server裡,我們選擇剛才編譯的那個DLL。

為了獲得更多資訊,按“Advanced...”按鈕,彈出如下對話方塊:

圖四

這裡 WSDL 檔案是必須設定的,它描述這個Web Service 能夠提供的服務,以及對外的介面。我們讓它存放在虛擬目錄下,檔案名稱是FoxWebService.WSDL。

這裡還有一個有用的選項就是“IntellSense Scripts”,關聯Web Service與Visual FoxPro開發環境之間的關係:將Web Service的介面註冊到IntellSense中,這樣在Visual FoxPro裡調用這個Web Service就會很方便的;當然,這裡也可以不將Web Service 註冊到 IntellSense 中,而在Visual FoxPro 裡註冊,具體方法參見:《Visual FoxPro 7 全新登場--Web Service Client》。

還有一個選項“Automatically generate web service file during project build”,意思是:當重新編譯項目產生COM時,同時建立新的Web Service檔案;這個選項其實是一個Visual FoxPro的Project Hook,同樣可以在Visual FoxPro的開發環境裡設定。

這裡填寫完有關資料之後,按“OK”,回到圖三。按動“Generate” 按鈕,如果註冊成功,將跳出對話方塊:

到這裡,算是到公告成了。

測試Web Service

簡單的測試代碼

怎麼使用一個Web Service,如果你看過《Visual FoxPro 7 全新登場--Web Service Client》一文,應該是沒什麼問題的,這裡只給出代碼:

*請務必保證 C 盤根目錄中不存在FoxWebService.txt檔案,如果有就刪除它(我們的目的是證明Web Service 是“無狀態”的)
LOCAL oweb as VFPWebService_WS
LOCAL loWS
loWS = NEWOBJECT("Wsclient",HOME()+"ffc\_webservices.vcx")
loWS.cWSName = "VFPWebService_WS"
oweb = loWS.SetupClient("http://BOEWORKS/first_web_service/FoxWebService.wsdl", "FoxWebService", "FoxWebServiceSoapPort")
XMLTOCURSOR(oweb.GetInvoice(0),"test")
?oweb.GetSumSales({^1997-01-01},{^1997-3-30})

如果測試成功了,就請查看C 盤根目錄中的 FoxWebService.txt 檔案,我的檔案中的內容是(根據實驗時間,結果會有不同):

開啟時間23:50:47關閉時間23:50:48開啟時間23:50:50關閉時間23:50:50

無狀態的Web Service

這裡我們發現,在這段代碼執行過程中,Web Service 對象建立、毀滅了兩次;而幾乎同樣的代碼,基於COM的應用,對象只建立、摧毀一次。——這就說明了Web Service是“無狀態”的,客戶程式每一次調用,就自動建立,調用完畢就自動摧毀。這裡調用了兩次,分別是調用GetInvoice()方法和GetSumSales()方法。這兩次方法的調用是沒有任何關係的,也就是說,Web Service是不會儲存前一次調用後產生的狀態,供以後調用時使用,這與傳統的COM調用是有很大的區別的。

這裡最有迷惑力的是這一段代碼:

oweb = loWS.SetupClient("http://BOEWORKS/first_web_service/FoxWebService.wsdl", "FoxWebService", "FoxWebServiceSoapPort")

看上去等同於調用COM時使用的CreateObject(),我還沒有仔細查看SOAP的文檔,但我想這段代碼只是請求Web Service的介面,並在客戶機本地初始化一些東西,而對Web Service沒有什麼影響。

無狀態的利弊

無狀態的最大好處就是高效率,Web Service不是為幾個客戶提供服務的,它不可能記憶每一個用戶端的請求狀態,如果那樣做,系統效率將很低很低。但是,如果Web Service不能知道客戶程式的狀態,也不能與客戶程式進行很好的互動,不能很好的互動,就不能做出大的、好的項目。這是俄我想起了ASP,作為Web 應用程式,它也是無狀態的,但為了實現伺服器與客戶機的互動(狀態記憶),就提出了所謂的儲存在用戶端的 cookies 和伺服器端的Session對象……以求效率與功能的平衡。

到底什麼是Web Service的發布

後記

Web Service 是很新、很流行的東西,很欣慰——Visual FoxPro 7 能很好的支援它的開發。雖然我在學習過程中遇到很多磨難,這不能說這種技術有什麼不好,只能認為我的水平太次,真的應該好好學習了……

又是淩晨一點了,我很擔心這篇東西的價值——有多少網友能順利的把實驗做下來,畢竟本文涉及了很多 Visual FoxPro 開發人員不熟悉的東西……

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.