全國最多中醫師線上諮詢網站-台灣中醫網
徵才【Delphi程式設計師】【PHP網頁程式設計師】(Delphi K.Top討論區原創公司國泰電腦企業徵才訊息,上班地點:台中市)
網站公告 :


Delphi K.Top討論區 » 多層架構應用程式開發討論區(Delphi) » ISAPI 或 CGI 型式的 WebService, 如何取得客戶端的 IP ?
發表新文章
瀏覽次數:2238
推到 Plurk!
推到 Facebook!

ISAPI 或 CGI 型式的 WebService, 如何取得客戶端的 IP ?

答題得分者是:pcplayer99
boson
中階會員




發表:64
回覆:139
積分:80
註冊:2004-07-31

發送簡訊給我
#1 發表時間:2008-10-31 23:33:40 IP:220.134.xxx.xxx 訂閱

剛開始撰寫 ISAPI 型式的 WebService 程式, 突然發現不知道如何取得 request 來自哪個 IP,
請有經驗的朋友幫忙一下, 謝謝


careychen
尊榮會員




發表:41
回覆:580
積分:954
註冊:2004-03-03

發送簡訊給我
#2 發表時間:2008-11-01 00:48:52 IP:59.126.xxx.xxx 訂閱

如果沒記錯的話,在 Request.RemoteAddr  就可以取得來源者的 ip 您試試

===================引 用 boson 文 章===================
剛開始撰寫 ISAPI 型式的 WebService 程式, 突然發現不知道如何取得 request 來自哪個 IP,
請有經驗的朋友幫忙一下, 謝謝
------
價值的展現,來自於你用哪一個角度來看待它!!

boson
中階會員




發表:64
回覆:139
積分:80
註冊:2004-07-31

發送簡訊給我
#3 發表時間:2008-11-01 01:02:20 IP:220.134.xxx.xxx 訂閱

Request 應該是 WebModule 的 property,
但我是寫 ISAPI/CGI 的 WebService , 無法存取 WebModule

careychen
尊榮會員




發表:41
回覆:580
積分:954
註冊:2004-03-03

發送簡訊給我
#4 發表時間:2008-11-01 12:43:19 IP:60.248.xxx.xxx 訂閱

好奇的問一下,您是用 Web Services -> SOAP Server Application 嗎? 然後選擇第一個 ISAPI/CGI 的那一個嗎?
如果是的話,有 Web Module 可以用,還是您是怎麼開始您的 Project 的?

===================引 用 boson 文 章===================
Request 應該是 WebModule 的 property,
但我是寫 ISAPI/CGI 的 WebService , 無法存取 WebModule
------
價值的展現,來自於你用哪一個角度來看待它!!

boson
中階會員




發表:64
回覆:139
積分:80
註冊:2004-07-31

發送簡訊給我
#5 發表時間:2008-11-01 15:09:00 IP:220.140.xxx.xxx 訂閱

對, 我是建立 SOAP Server Application , 並選取 CGI Stand-alone excutable 的型態,
Service Name 我設為 MyService, 於是 Delphi 自動幫我建立了 Project1.dpr , Unit1.pas, MyServiceIntf.pas, MyServiceImpl.pas 幾個檔案,
我加上幾行程式在 MyServiceImpl 與 MyServiceIntf
MyServiceIntf.pas 內容為 :

而 MyServiceImpl.pas 內容為 :

Project1.dpr 內容為 :

我另開一個專案, 在 Form 上放一個 Button, 再放一個 HTTPRIO 元件, 然後 use MyServiceIntf
設定好 HTTPRIO 的必要 property 之後,  在 Button 的 forbidden 事件中寫下一行程式 :


執行結果, 得到的是 Access violation 訊息
我在網路上搜尋相關文章, 好像 CGI/ISAPI 型式的 WebService 不能存取 WebModule ?

careychen
尊榮會員




發表:41
回覆:580
積分:954
註冊:2004-03-03

發送簡訊給我
#6 發表時間:2008-11-01 17:27:46 IP:60.248.xxx.xxx 訂閱

那再問一下,那個 Unit1 不就是 WebModule 嗎?
裡面就有 Request 了難道您沒有使用這個?
------
價值的展現,來自於你用哪一個角度來看待它!!

boson
中階會員




發表:64
回覆:139
積分:80
註冊:2004-07-31

發送簡訊給我
#7 發表時間:2008-11-01 21:51:37 IP:220.140.xxx.xxx 訂閱

就是使用了 Unit1 裏面的 WebModule , 結果發生了 Access violation 錯誤

雖然在 Project1.dpr 裏面, 已經執行了 Application.CreateForm(TWebModule1, WebModule1);
好像 WebModule 已經被 Create 了, 但卻是不能使用的

如果無法存取 WebModule , 那就不知道要從哪裏取得對方的 IP ?


careychen
尊榮會員




發表:41
回覆:580
積分:954
註冊:2004-03-03

發送簡訊給我
#8 發表時間:2008-11-01 22:41:49 IP:59.126.xxx.xxx 訂閱

Hi, 我寫了個 Sample 依您的命名方式,您先直接看一下

SOAP CGI Sample Code


測試方法
1、將 CGISample.exe Copy 至您的 IIS 的 root 底下
2、啟動瀏灠器輸入以下兩個 url 
        
    a、 http://localhost/CGISample.exe/            ==>  Path /             第一個 WebActionItem      
                                                ↑  (記得在 exe 後要加個 / )   不然  XP 的不會錯,一上 2003 就會出錯哦!!!

                                                                                                        
    b、 http://localhost/CGISample.exe/Test    ==>  Path /Test     第二個 WebActionItem   

並請注意以下事情
使用 IIS 5 (XP)   請在 IIS 的網站 -> 主目錄 -> 使用權限 -> 選擇【指令碼及執行檔】
使用 IIS 6 (2003)  除了上面步驟要設定外,還得在 【網頁服務延伸】中將【所有未知的 CGI 擴充程式】設為【已允許】



祝您順利

  
===================引 用 boson 文 章===================
就是使用了 Unit1 裏面的 WebModule , 結果發生了 Access violation 錯誤

雖然在 Project1.dpr 裏面, 已經執行了 Application.CreateForm(TWebModule1, WebModule1);
好像 WebModule 已經被 Create 了, 但卻是不能使用的

如果無法存取 WebModule , 那就不知道要從哪裏取得對方的 IP ?

------
價值的展現,來自於你用哪一個角度來看待它!!

編輯記錄
careychen 重新編輯於 2008-11-01 22:44:09, 註解 無‧

boson
中階會員




發表:64
回覆:139
積分:80
註冊:2004-07-31

發送簡訊給我
#9 發表時間:2008-11-01 23:57:42 IP:220.140.xxx.xxx 訂閱

多謝你寫了個 Sample , 不過你我說的是不一樣的東西

你的 Sample 雖然是從 SOAP Server Application 這個精靈建立的,
但你其實是使用 WebBroker 技術, 把程式碼寫在 WebModule 底下, 並依 WebAction 來執行不同的動作,
基本上 WebBroker 程式輸出結果是 HTML 文件, 可以直接顯示在網頁上

而我說的是 WebService 技術, 程式碼寫在 *impl.pas 所建立的物件當中(請參見前面貼出的程式碼),
基本上, WebService 輸出的是 xml 文件, 需要在 Client 加以解析, 以從中取得需要的資料,
例如 Delphi 就提供了 HTTPRIO 元件來做這個解析的動作

我的問題關鍵在於, WebService 的程式, 無法從 *impl.pas 呼叫 WebModule
因此無法使用 WebModule.Request 等等 property

我查了一下 Google, 發現 *impl.pas 無法使用 WebModule 這似乎是理所當然的事,
但我就不曉得除此之外, 能從哪裏取得 client 的 IP ?

pcplayer99
資深會員




發表:100
回覆:556
積分:396
註冊:2003-01-21

發送簡訊給我
#10 發表時間:2008-11-02 00:19:42 IP:121.15.xxx.xxx 訂閱

查了下我以前的笔记,这样子应该可以:

Delphi 7 , WebServices
服务器端实现的接口函数里,如何知道调用这个接口函数的客户端的
IP?
在实现部分的代码里, uses WebBrokerSoap
然后,可以通过以下代码直接获得当前调用这个函数的客户端的
IP:
GetSOAPWebModule.Request.RemoteAddr;
GetSOAPWebModule 这个函数是在 WebBrokerSoap 这个单元里的。

boson
中階會員




發表:64
回覆:139
積分:80
註冊:2004-07-31

發送簡訊給我
#11 發表時間:2008-11-02 00:36:37 IP:220.140.xxx.xxx 訂閱

謝謝 pcplayer99 網友, 你提供的方法確實可行

我想 Delphi 就是提供 WebBrokerSoap 單元給 WebService 程式使用的吧

系統時間:2012-01-28 21:22:54,  線上使用者 192 / Max 772,主題數:94,787,回覆數:214,669。  聯絡我們 | Delphi.ktop討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!
5151線上健康照護網 | 台灣西醫網 | 台灣中醫網 | 台灣牙科網 | 台灣照護網 | 趴趴狗旅遊網
大花蓮旅遊網 | 大花蓮民宿網 | 花蓮旅遊網 | 花蓮旅遊 | 花蓮旅遊 | 花蓮住宿
花蓮民宿網 | 花蓮旅遊 | 花蓮住宿 | 花蓮民宿 | 花蓮旅遊 | 花蓮民宿
花蓮住宿 | 大南投旅遊網 | 大南投民宿網 | 日月潭風景區 | 日月潭旅遊網 | 日月潭民宿網
日月潭住宿網 | 宜蘭旅遊網 | 宜蘭民宿網 | 宜蘭住宿網 | 宜蘭旅遊網 | 宜蘭民宿網
宜蘭住宿網 | 宜蘭旅遊網 | 宜蘭民宿網 | 宜蘭住宿網 | 台東旅遊網 | 台東民宿網
台東住宿網 | 台東旅遊網 | 台東民宿網 | 台東住宿網 | 台東旅遊 | 台東民宿
台東住宿 | 綠島旅遊網 | 綠島民宿網 | 綠島住宿網 | 綠島旅遊網 | 綠島民宿網
綠島住宿網 | 綠島旅遊網 | 綠島民宿網 | 綠島住宿網 | 集集旅遊網 | 集集民宿網
集集住宿網 | 關子嶺旅遊網 | 關子嶺民宿網 | 白河旅遊網 | 白河民宿網 | 心脈大師
尊榮牙醫診所 |