Esempio n. 1
0
        private async Task <CallOpenApiWorkerMethodResponse> CallResult(RemoteJsOpenApiDocs remoteApi, CallOpenApiWorkerMethod requestModel)
        {
            var responseRecord = await HttpClient.PostAsync(remoteApi.Description.HostUrl, remoteApi.Description.Name, HttpPaths.HandleCall, requestModel);

            ExecutionContext.ExecutionLogs.Add(new JsExecutionLog
            {
                EventIdName = EventIds.CallRemoteApi.CallLogged,
                Message     = "Логгирование удаленного запроса",
                DataJson    = ZooSerializer.Serialize(responseRecord)
            });

            try
            {
                //Task<RemoteApiResponseRecord> PostAsync<TRequest>(string hostUrl, string hostName, string path, TRequest request)
                return(responseRecord.GetResult <CallOpenApiWorkerMethodResponse>());
            }
            catch (Exception ex)
            {
                ExecutionContext.ExecutionLogs.Add(new JsExecutionLog
                {
                    EventIdName = EventIds.CallRemoteApi.ResponseDeserializationError,
                    Message     = "Ошибка при дессериализации",
                    DataJson    = ZooSerializer.Serialize(responseRecord)
                });

                return(new CallOpenApiWorkerMethodResponse
                {
                    IsSucceeded = false,
                    ExcepionData = ExcepionData.Create(ex)
                });
            }
        }
        internal static async Task <RemoteJsOpenApiDocs> GetRemoteDocsViaHttpRequest(this IServerJsHttpClient httpClient, RemoteJsOpenApi remoteApi)
        {
            var response = await httpClient.GetAsync(remoteApi.HostUrl, remoteApi.Name, HttpPaths.GetDocs);

            var docsRecord = new RemoteJsOpenApiDocs
            {
                Description        = remoteApi,
                ReceivingException = response.ExcepionData,
                DocsReceivedOnUtc  = DateTime.UtcNow
            };

            try
            {
                if (response.IsSuccessfull())
                {
                    docsRecord.Docs           = response.GetResult <JsOpenApiDocs>();
                    docsRecord.IsDocsReceived = true;
                }
                else
                {
                    docsRecord.IsDocsReceived    = false;
                    docsRecord.DocsReceivedOnUtc = DateTime.UtcNow;
                }
            }
            catch (Exception ex)
            {
                docsRecord.IsDocsReceived     = false;
                docsRecord.ReceivingException = new ExcepionData
                {
                    Message    = ex.Message,
                    StackTrace = ex.StackTrace
                };
            }

            return(docsRecord);
        }