2015-05-10 47 views
1

對不起,如果我的問題很明顯。我沒有Rest Server的經驗。我在google和stackoverflow上做了很長時間的搜索,但是我沒有找到對我的案例的迴應。 我已經使用Delphi嚮導在XE7中使用默認設置創建了DataSnap Rest Server。 除了通過嚮導創建ReverseString和EchoString默認的方法,我創建了一個新的方法:使用Indy訪問Datasnap Rest Server方法

//Server Method 
function TSrvServerMetodos.SenMsgToUsers(Plataform: integer; 
    Users: TJSONArray; Title, Msg: String): String; 
begin 
//staff code 
end; 

我的DataSnap其餘服務器在本地主機上運行:8080。

在客戶端,我想訪問這個方法使用代碼與印:

procedure TfrmUntClientRest.Button4Click(Sender: TObject); 
const        //TsrvServerMetodos/ 
    sendUrl = 'http://localhost:8080/datasnap/rest/TsrvServerMetodos/SendPushToUsers'; 
var 
    Params: TStringList; 
    idHTTP: TIDHTTP; 
    SSLIOHandler: TIdSSLIOHandlerSocketOpenSSL; 
    AuthHeader,r: string; 
begin 
    idHTTP := TIDHTTP.Create(nil); 
    try 
     SslIOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil); 
     idHTTP.IOHandler := SSLIOHandler; 
     Params := TStringList.Create; 
     idHTTP.Request.Host := sendUrl; 
     Params.Values['Plataform']:='1'; 
     Params.Values['Users=']:='["Luiz"]'; 
     Params.Values['Title']:='Tit'; 
     Params.Values['Msg']:='Msg'; 
     IdHTTP.Request.ContentType := 'application/x-www-form-urlencoded;charset=UTF-8'; 
     r:=IdHTTP.Post(sendUrl, Params); 
     Memo1.Lines.Add('Send result: ' + r); 
    finally 
    FreeAndNil(idHTTP); 
    Params.Free; 
    end; 
end; 

當我在按鈕點擊運行上面的代碼,我得到了一個錯誤: 「第一次機會異常的。$ 747F1CDA Exception類TDBXError與消息 '服務器方法列表中沒有找到TsrvServerMetodos.updateSendPushToUsers法' 過程DataSnapServer.exe(6236)」

我的問題是:

  1. 我的程序是SendPushToUsers,但Rest Server正在映射到updateSendPushToUsers。有人可以幫我解決嗎?

  2. 有沒有辦法讓url的快捷方式爲http://localhost:8080/SendPushToUsers而不是http://localhost:8080/datasnap/rest/TsrvServerMetodos/SendPushToUsers

謝謝你是進步,路易斯

回答

0

關於你提到的第二個問題:你總是可以使用反向代理(Apache的HTTP響應,Nginx),其轉換網址,以便於外部資源

http://example.com/SendPushToUsers 
的請求

將被路由到

http://localhost:8080/datasnap/rest/TsrvServerMetodos/SendPushToUsers 

配置實例和文檔,可以發現在網絡上,例如herehere

關於你的第一個問題:這也可以用反向代理來完成。

+0

對不起,但我沒有在WebServer中運行服務器應用程序。這是一個桌面獨立應用程序。 –

+0

我在這裏找到了對第一個問題的回覆:http://docwiki.appmethod.com/appmethod/1.13/topics/en/DataSnap_REST_Messaging_Protocol。有人可以幫助解決第二個問題嗎?問候,路易斯 –