|
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
syntech
註冊時間: 2003-05-16 文章: 4214 來自: Taipei,Taiwan
第 1 樓
|
發表於: 星期四 十二月 16, 2004 6:04 pm 文章主題: VFP Web Service 範例 |
|
|
VFP Web Service 範例
原理:
先將VFP程式編譯為VFP-COM物件(DLL),再利用VFP Web Service Wizard
將VFP-COM轉成Web Service,置於 App. Server中.
Client端則使用SOAP 介面存取遠端server上的VFP程式.
使用版本:
VFP : 需要 VFP 7.0 以上版本 (本篇使用 VFP 8.0 SP1)
額外工具: MS SOAP TOOLKIT VER. 3 (server 及 client 都需要)
範例說明:
1.VFP-COM 製作:
a.先建立空白專案,令為 VFP_ASP01,定義class VFP_COM01,其中包含兩個
function GETKEYPRO()及USINGEXCEL(),其中USINGEXCEL使用了
late binding,如果要使用early binding 的話,請改用createobjectex() (vfp 7.0
以上提供),兩者差別請看on-line help或相關文件.(底下所作之VFP-COM
範例 與 利用IE及ASP執行遠端程式 之範例相同)
代碼: |
DEFINE CLASS VFP_COM01 AS Custom OLEPUBLIC
************************************************************************************
* 檢查 是否安裝 單機 KEYPRO
************************************************************************************
FUNCTION GETKEYPRO( cSYS_NO AS STRING) AS STRING
&& 支援參數
PUBLIC ARRAY aFile[10,8], aKeyValue[10,10], aKey[10,10]
PUBLIC ARRAY RECNB[10], RE[10]
PUBLIC IS_CASE
STORE .F. TO IS_CASE
&& 區域變數
LOCAL VALE,cMESSSAGE1
&& KEYPRO檢查
&& .F. : 沒有使用權限
&& .T. : 有使用權限
VALE = KEY_WD(cSYS_NO)
IF VALE = .F.
STORE "N" TO cMESSAGE1 && 沒有使用權限
ELSE
STORE "Y" TO cMESSAGE1 && 有使用權限
ENDIF
RETURN cMESSAGE1
ENDFUNC
************************************************************************************
* 建立EXCEL物件,產生一EXCEL檔案
************************************************************************************
FUNCTION USINGEXCEL( ) as String
X=CREATEOBJECT('Excel.application') && 建立一個EXCEL物件
X.Workbooks.Add() && 新增一個工作區
X.Range("A1").Select && 選擇CELL A1
X.ActiveCell.FormulaR1C1 = "1" && 填入 1
X.ActiveWorkbook.SaveAs('c:\b.xls' ) && 存檔成 C:\B.XLS
X.Quit() && 關閉EXCEL
RELEASE X
RETURN 'OK'
ENDFUNC
************************************************************************************
ENDDEFINE
|
b.Build時選擇 Multi-threaded COM server (dll),建立vfp_asp01.dll
(註:作成 Win32 executable/COM server (exe) ,或 Single-threaded COM
server (dll),都可以,其中差異,請參閱相關文件)
c.開啟regedit,可以發現系統多註冊了一個 vfp_asp01.VFP_COM01物件,
其中vfp_asp01為專案名稱,VFP_COM01是自定義Class的名稱.
d.可以直接建立vfp_asp01.VFP_COM01於Local端測試.
代碼: |
LOCAL cTEST
X=CREATEOBJECT('VFP_ASP01.VFP_COM01') && 建立VFP_ASP01.VFP_COM01物件
cTEST=X.GETKEYPRO('BMS') && 執行該物件的GETKEYPRO()檢查KEYPRO
IF cTEST = 'Y'
? "有使用權限!!"
ELSE
? "沒有使用權限!!"
ENDIF
? X.USINGEXCEL() && 執行USINGEXCEL()以建立EXCEL文件
RELEASE ALL
|
2.利用VFP Web Service Wizard 將VFP-COM轉成Web Service (這個範例並不
深究各個設定內容)
a.執行 [tools][wizard][web services]
b.如果是第一次執行,會直接出現[Advance…]的內容,
[STK3 Wizard]是利用 MS SOAP Toolkit 3.0 的wizard來產生wdsl檔.
若一切沒問題的話,按下[Generate]就會產生wdsl檔.
c.按下[Advance…]會先出現[Options]頁,這裡主要關注的是Service name與
物件名稱相同,都是VFP_COM01,然後是WSDL檔案位置,本例中是
c:\inetpub\wwwroot\aspnet_client\
d.VFP_COM01所定義的兩個函式GETKEYPRO()及USINGEXCEL()會出
現在[Methods] 頁中
e.回到步驟b畫面,按下[Generate]產生WSDL檔
完成後會出現一個訊息視窗,說明:
COM Server:XXXXX\vfp_asp01.dll
Class : VFP_COM01
WSDL: c:\inetpub\wwwroot\aspnet_client\VFP_COM01.WSDL
ASP: http://XXXXX/aspnet_client/VFP_COM01.ASP
3.VFP Client 端程式撰寫
a.client端程式利用createobject()建立MSSOAPClient物件,操作後端程式.
代碼: |
LOCAL cTEST
&& 建立MSSOAP.SoapClient30物件
X=CREATEOBJECT('MSSOAP.SoapClient30')
&& 指定webservice服務
X.MSSoapInit ('http://localhost/aspnet_client/VFP_COM01.WSDL')
&& 執行該物件的GETKEYPRO()檢查KEYPRO
cTEST=X.GETKEYPRO('BMS')
IF cTEST = 'Y'
? "有使用權限!!"
ELSE
? "沒有使用權限!!"
ENDIF
&& 執行USINGEXCEL()以建立EXCEL文件
? X.USINGEXCEL()
RELEASE ALL
|
可以很明顯的發現,與前面直接測試VFP_COM01.dll的程式幾乎完全相
同,這就是WebService的魅力,可以把遠端的物件當作本地物件使用.
討論:
1. 這只是簡單的範例,所以並未做錯誤處理的程序. _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
goto-dream
註冊時間: 2004-05-11 文章: 909
第 2 樓
|
|
回頂端 |
|
|
goto-dream
註冊時間: 2004-05-11 文章: 909
第 3 樓
|
|
回頂端 |
|
|
kalok
註冊時間: 2010-08-26 文章: 284
第 4 樓
|
發表於: 星期四 四月 03, 2014 7:37 pm 文章主題: |
|
|
在win server 2003產生WSDL檔時有問題 |
|
回頂端 |
|
|
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|