Веб-сервис PP.SOM в первую очередь предназначен для разработки систем на базе веб-приложений. Однако иногда может возникнуть необходимость обратиться к веб-сервису из разрабатываемых на базе настольного приложения сборок/форм/модулей. В языке Fore отсутствуют необходимые классы для работы с веб-сервисами, поэтому организовать работу в данном случае можно только используя связку Fore.NET-Fore. Для отправки запросов и получения ответов от веб-сервиса используются классы HttpWebRequest/HttpWebResponse (.NET Framework, пространства имен System.Net). Ниже приведен пример статической функции на языке Fore.NET, которая позволяет отправлять JSON-запросы и принимать ответы веб-сервиса.
Public Class SampleWebClient
Public Shared Function JsonHttpRequest(urlString: string; jsonContent: string): string;
Var
response: String;
wRequest: HttpWebRequest;
wResponse: HttpWebResponse;
enc: Encoding;
bytes: Array Of Byte;
requestStream, responseStream: Stream;
reader: StreamReader;
Begin
//Создание объекта для отправки запроса веб-сервису и получения ответа
wRequest := HttpWebRequest.CreateHttp(urlString);
Try
bytes := System.Text.Encoding.ASCII.GetBytes(jsonContent);
//Установка параметров
wRequest.Method := "POST";
wRequest.ContentLength := bytes.Length;
wRequest.ContentType := "application/json;charset=UTF-8";
//Запись запроса
requestStream := wRequest.GetRequestStream();
requestStream.Write(bytes, 0, bytes.Length);
requestStream.Close();
//Отправка запроса и получение ответа
wResponse := wRequest.GetResponse() As HttpWebResponse;
//Если запрос выполнился успешно, то считываем ответ
If wResponse.StatusCode = HttpStatusCode.OK Then
responseStream := wResponse.GetResponseStream();
reader := New StreamReader(responseStream);
response := reader.ReadToEnd();
End If;
//Закрытие объекта и освобождение ресурсов
wResponse.Close();
Except On we: WebException Do
Begin
System.Diagnostics.Debug.WriteLine(we.Message)
End;
On ex: Exception Do
Begin
System.Diagnostics.Debug.WriteLine(ex.Message)
End;
Finally
wResponse.Close();
End Try;
Return response;
End Function;
End Class;
Следующий код отправляет JSON-запрос на подключение к репозиторию и выводит ответ веб-сервиса в консоль среды разработки:
Public Shared Sub Main(Params: StartParams);
Var
request: string;
response: string;
Begin
request := "{ ""OpenMetabase"": { ""tDef"": { ""id"": ""PPREPOSITORY"" } , ""tCreds"": { ""user"": { ""id"": ""pprepository"" } , ""pass"": ""pprepository"" } } }";
response := JsonHttpRequest("http://localhost:9090/axis2/services/PP.SOM.Som", request);
System.Diagnostics.Debug.WriteLine(response);
End Sub;
Для того, чтобы отправить JSON-запрос из кода на Fore воспользуемся ресурсами сборки ForeNet:
Sub TestJsonRequest;
Var
MB: IMetabase;
Run: IForeNETRuntime;
Asm: IForeNETRuntimeAssembly;
Typ: IForeNETRuntimeType;
response: Variant;
url, request: String;
Begin
url := "http://localhost:9090/axis2/services/PP.SOM.Som";
request := "{ ""OpenMetabase"": { ""tDef"": { ""id"": ""PPREPOSITORY"" } , ""tCreds"": { ""user"": { ""id"": ""pprepository"" } , ""pass"": ""pprepository"" } } }";
MB := MetabaseClass.Active;
Run := ForeNETAssemblyClass.Runtime;
Asm := Run.Assembly(MB.ItemById("SampleAssembly").Bind As IForeNETAssembly);
Typ := Asm.Type("SampleAssembly.SampleWebClient");
response := Typ.InvokeMethod("JsonHttpRequest", Null, url, request);
Debug.WriteLine(response);
End Sub TestJsonRequest;
См. также: