2015-05-10 2 views
1

Извините, если мой вопрос очевиден. У меня нет опыта работы с Rest Server. Я сделал длинный поиск в google и stackoverflow, но я не нашел ответа на мое дело. Я создал сервер DataSnap Rest с помощью мастера Delphi с настройками по умолчанию в XE7. В дополнение к 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?

Благодаря является Advance, Луиз

ответ

0

Что касается вашего второго вопроса: вы всегда можете использовать обратный прокси-сервер (Apache HTTP, Nginx), который переводит URL, так что запрос на внешний ресурс

http://example.com/SendPushToUsers 

будет направлен на

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

примеры конфигурации и документы могут быть найдены в сети, например here и here.

Что касается вашего первого вопроса: это можно сделать с помощью обратного прокси.

+0

Извините, но я не запускаю приложение Server в WebServer. Это настольное автономное приложение. –

+0

Я нашел ответ на первый вопрос здесь: http://docwiki.appmethod.com/appmethod/1.13/topics/en/DataSnap_REST_Messaging_Protocol. Помогает ли кто-нибудь по второму вопросу? С уважением, Луис –