Beispiel #1
0
        protected override async Task DoSendAsync(JimuTransportMsg msg)
        {
            var invokeMessage = msg.GetContent <JimuRemoteCallData>();
            var uri           = $"http://{_address.CreateEndPoint()}/{invokeMessage.Descriptor.RoutePath}";

            //if (invokeMessage.Descriptor.HttpMethod() == "get" || invokeMessage.Descriptor.HttpMethod() == null)
            //{
            foreach (var para in invokeMessage.Parameters)
            {
                uri.SetQueryParam(para.Key, para.Value);
            }
            //var ret = await uri.SendJsonAsync(HttpMethod.Get, msg);
            //var str = await ret.Content.ReadAsStringAsync();
            var result = await uri.SendJsonAsync(HttpMethod.Get, msg).ReceiveJson <JimuTransportMsg>();

            //result = await uri.GetJsonAsync<RemoteInvokeResultMessage>();

            //return new RemoteInvokeResultMessage { Result = result, ResultType = result.GetType().ToString() };
            //}
            //else if (invokeMessage.Descriptor.HttpMethod() == "post")
            //{
            //    switch (invokeMessage.Descriptor.HttpContentType())
            //    {
            //        case "application/json":
            //        case null:
            //            result = await uri.PostJsonAsync(invokeMessage.Parameters).ReceiveJson<TransportMessage>();
            //            break;
            //        case "application/x-www-form-urlencoded":
            //            result = await uri.PostUrlEncodedAsync(invokeMessage.Parameters).ReceiveJson<TransportMessage>();
            //            break;
            //        case "text/plain":
            //            StringBuilder paraSb = new StringBuilder();
            //            foreach (var para in invokeMessage.Parameters)
            //            {
            //                paraSb.Append($"{para.Key}={para.Value}&");
            //            }
            //            result = await uri.PostStringAsync(paraSb.Length > 0 ? paraSb.ToString().TrimEnd('&') : "").ReceiveJson<TransportMessage>();
            //            break;
            //        case "multipart/form-data":
            //            var ret = await uri.PostMultipartAsync((bc) =>
            //            {
            //                foreach (var para in invokeMessage.Parameters)
            //                {
            //                    if (para.Value.GetType().IsAssignableFrom(typeof(HttpContent)))
            //                    {
            //                        bc.Add((HttpContent)para.Value);
            //                    }
            //                    //bc.Add(para.Key, (HttpContent)para.Value);
            //                }
            //            });
            //            result = TransportMessage.Create(msg.Id, new RemoteInvokeResultMessage { Result = ret });
            //            break;
            //        default:
            //            result = TransportMessage.Create(msg.Id, new RemoteInvokeResultMessage { ErrorCode = "501", ErrorMsg = "not support media type" });
            //            break;
            //    }
            //}
            //result = new RemoteInvokeResultMessage { ErrorCode = "501", ErrorMsg = "not support media type" };
            await _clientListener.Received(result);
        }
Beispiel #2
0
        public RemoteCallerContext(JimuTransportMsg transportMessage, IServiceEntryContainer serviceEntryContainer,
                                   IResponse response, ILogger logger)
        {
            Response         = response;
            TransportMessage = transportMessage;
            try
            {
                RemoteInvokeMessage = transportMessage.GetContent <JimuRemoteCallData>();
            }
            catch (Exception ex)
            {
                logger.Error("failed to convert transportmsg.content to  JimuRemoteCallerData.", ex);
                return;
            }

            ServiceEntry = serviceEntryContainer.GetServiceEntry()
                           .FirstOrDefault(x => x.Descriptor.Id == RemoteInvokeMessage.ServiceId);
            if (ServiceEntry == null)
            {
                logger.Error($"not found service: {RemoteInvokeMessage.ServiceId}", new EntryPointNotFoundException($"{RemoteInvokeMessage.ServiceId}"));
            }
        }