VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

VFP Web Service 範例

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
syntech



註冊時間: 2003-05-16
文章: 4211
來自: 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. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
goto-dream



註冊時間: 2004-05-11
文章: 909


第 2 樓

發表發表於: 星期六 一月 22, 2005 5:28 pm    文章主題: 引言回覆

這也是一樣沒有補到KEY_WD()

代碼:
FUNC KEY_WD
   LPARAMETERS CSYS_NO
   Local  RET
   STORE .t. to RET

   * 這裡是機密

    RETURN RET
ENDFUNC

_________________
福隆昌淨水有限公司--淨水器的專家,淨水器,飲水機,濾心!!

想了解更多,您可上幸福雞湯組.找尋!!丁澐瑄.老師.

          愛作夢
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
goto-dream



註冊時間: 2004-05-11
文章: 909


第 3 樓

發表發表於: 星期六 一月 22, 2005 7:13 pm    文章主題: 引言回覆

我照得作了.卻出現ERROR

vfp_asp01.VFP_COM01于Local端測試.ok
卻在執行MSSOAPClient物件時.產生錯誤

利用dEBUG去測.發現會在以下的程式碼停駐

代碼:
&&   执行该对象的GETKEYPRO()检查KEYPRO
   cTEST=X.GETKEYPRO('BMS')   

_________________
福隆昌淨水有限公司--淨水器的專家,淨水器,飲水機,濾心!!

想了解更多,您可上幸福雞湯組.找尋!!丁澐瑄.老師.

          愛作夢
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
kalok



註冊時間: 2010-08-26
文章: 284


第 4 樓

發表發表於: 星期四 四月 03, 2014 7:37 pm    文章主題: 引言回覆

在win server 2003產生WSDL檔時有問題
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作