예제 #1
0
        /// <summary>
        /// 准备
        /// </summary>
        /// <param name="service">当前服务</param>
        /// <param name="message">当前消息</param>
        /// <param name="tag">扩展信息</param>
        /// <param name="next">下一个处理方法</param>
        /// <returns></returns>
        async Task IMessageMiddleware.Handle(IService service, IInlineMessage message, object tag, Func <Task> next)
        {
            var serviceName = message.Service;

            if (ToolsOption.Instance.ReverseProxyMap == null || !ToolsOption.Instance.ReverseProxyMap.TryGetValue(message.Service, out serviceName))
            {
                if (string.Equals(service.ServiceName, message.Service, StringComparison.OrdinalIgnoreCase))
                {
                    message.State         = MessageState.Unhandled;
                    message.ResultCreater = ApiResultHelper.State;
                    await next();

                    return;
                }
            }
            FlowTracer.BeginStepMonitor($"[反向代理] {serviceName}/{message.Method}");
            message.Service = serviceName;
            try
            {
                message.ResultCreater ??= ApiResultHelper.State;
                await MessagePoster.Post(message, true);
            }
            finally
            {
                FlowTracer.EndStepMonitor();
            }
        }
예제 #2
0
        public async Task Context()
        {
            var traceInfo = new TraceInfo
            {
                Start   = new DateTime(2020, 3, 12),
                CallApp = "UnitTest"
            };
            var msg = await MessagePoster.Post(new InlineMessage
            {
                Service   = "UnitService",
                Method    = "v1/context",
                TraceInfo = traceInfo,
                Context   = new System.Collections.Generic.Dictionary <string, string>
                {
                    { "User", new UserInfo
                      {
                          UserId         = "20200312",
                          NickName       = "agebull",
                          OrganizationId = "20200312"
                      }.ToJson() }
                }
            });

            msg.OfflineResult();
            Console.WriteLine(msg.Result);
            var ctx = msg.ResultData;

            Assert.IsTrue(ctx != null, msg.Result);
            Assert.IsTrue(msg.TraceInfo.CallApp == traceInfo.CallApp, msg.TraceInfo.CallApp);
            Assert.IsTrue(msg.TraceInfo.Start == traceInfo.Start, msg.TraceInfo.Start?.ToString());
            //Assert.IsTrue(ctx.User.OrganizationId == ZeroTeamJwtClaim.UnknownOrganizationId, ctx.User.OrganizationId.ToString());
        }
예제 #3
0
 /// <summary>
 /// 准备
 /// </summary>
 /// <param name="message">当前消息</param>
 /// <returns></returns>
 async Task IMessageMiddleware.OnEnd(IInlineMessage message)
 {
     if (!GlobalContext.IsOptionTrue("Receipt"))
     {
         return;
     }
     var receipt = MessageHelper.Simple(message.ID, ToolsOption.Instance.ReceiptService, ToolsOption.Instance.ReceiptApi, message.ToJson());
     await MessagePoster.Post(receipt);
 }
예제 #4
0
        public async Task NonSupport()
        {
            var msg = await MessagePoster.Post(new InlineMessage
            {
                Service = "UnitService",
                Method  = "abcccceerw"
            });

            Assert.IsTrue(msg.State == MessageState.Unhandled, msg.Result);
        }
예제 #5
0
        public async Task Test()
        {
            var msg = await MessagePoster.Post(new InlineMessage
            {
                Service = "UnitService",
                Method  = "_health_"
            });

            Assert.IsTrue(msg.State == MessageState.Success, msg.Result);
        }
예제 #6
0
        public async Task <string> ParallelCall()
        {
            var res = await MessagePoster.Post(new InlineMessage
            {
                Topic = "ParallelTest",
                Title = "hello"
            });

            return(JsonConvert.SerializeObject(res.ResultData, Formatting.Indented));
        }
예제 #7
0
        public async Task Exception()
        {
            var msg = await MessagePoster.Post(new InlineMessage
            {
                Service = "UnitService",
                Method  = "v1/exception"
            });

            msg.OfflineResult();
            Assert.IsTrue(msg.State == MessageState.FrameworkError, msg.Result);
        }
예제 #8
0
        public async Task VoidCall()
        {
            var msg = await MessagePoster.Post(new InlineMessage
            {
                Service  = "UnitService",
                Method   = "v1/void",
                Argument = @"{""argument"": ""value""}"
            });

            Assert.IsTrue(msg.Result == null, msg.Result);
        }
예제 #9
0
        public async Task XmlString()
        {
            var msg = await MessagePoster.Post(new InlineMessage
            {
                Service  = "UnitService",
                Method   = "v1/xml",
                Argument = @"{""Value"": ""value""}"
            });

            Assert.IsTrue(msg.Result[0] == '<', msg.Result);
        }
예제 #10
0
        public async Task FromServices()
        {
            var msg = await MessagePoster.Post(new InlineMessage
            {
                Service  = "UnitService",
                Method   = "v1/FromServices",
                Argument = "{}"
            });

            Assert.IsTrue(msg.State == MessageState.Success, msg.Result);
        }
예제 #11
0
        public async Task FromServices()
        {
            var(msg, ser) = await MessagePoster.Post(new InlineMessage
            {
                ServiceName = "UnitService",
                ApiName     = "v1/FromServices",
                Content     =
                    @"{
}"
            });

            Assert.True(msg.State == MessageState.Success, msg.Result);
        }
예제 #12
0
        public async Task CustomSerialize()
        {
            var msg = await MessagePoster.Post(new InlineMessage
            {
                Service  = "UnitService",
                Method   = "v1/customSerialize",
                Argument = "<xml><Value>val</Value></xml>"
            });

            msg.OfflineResult();
            Console.WriteLine(msg.Result);
            Assert.IsTrue(msg.State == MessageState.Success, msg.Result);
        }
예제 #13
0
        public async Task Error()
        {
            var msg = await MessagePoster.Post(new InlineMessage
            {
                Service = "UnitService",
                Method  = "v1/err"
            });

            msg.OfflineResult();
            var res = msg.ResultData as IApiResult;

            Assert.IsFalse(res.Success, msg.Result);
        }
예제 #14
0
        public async Task FailedMessage()
        {
            try
            {
                var msg = await MessagePoster.Post(null);

                Assert.Fail("不应执行");
            }
            catch (Exception ex)
            {
                Assert.IsTrue(ex is NotSupportedException, ex.Message);
            }

            try
            {
                var msg = await MessagePoster.Post(new InlineMessage());

                Assert.Fail("不应执行");
            }
            catch (Exception ex)
            {
                Assert.IsTrue(ex is NotSupportedException, ex.Message);
            }

            try
            {
                var msg = await MessagePoster.Post(new InlineMessage
                {
                    Service = "abbc"
                });

                Assert.Fail("不应执行");
            }
            catch (Exception ex)
            {
                Assert.IsTrue(ex is NotSupportedException, ex.Message);
            }
            try
            {
                var msg = await MessagePoster.Post(new InlineMessage
                {
                    Service = "UnitService"
                });

                Assert.Fail("不应执行");
            }
            catch (Exception ex)
            {
                Assert.IsTrue(ex is NotSupportedException, ex.Message);
            }
        }
예제 #15
0
        public async Task Argument()
        {
            var(msg, ser) = await MessagePoster.Post(new InlineMessage
            {
                ServiceName = "UnitService",
                ApiName     = "v1/argument",
                Content     =
                    @"{
    ""Value"" : ""string""
}"
            });

            Assert.True(msg.State == MessageState.Success, msg.Result);
        }
예제 #16
0
        public async Task Argument()
        {
            var msg = await MessagePoster.Post(new InlineMessage
            {
                Service  = "UnitService",
                Method   = "v1/argument",
                Argument =
                    @"{
    ""Value"" : ""string""
}"
            });

            Assert.IsTrue(msg.State == MessageState.Success, msg.Result);
        }
예제 #17
0
        public async Task Validate2()
        {
            var msg = await MessagePoster.Post(new InlineMessage
            {
                Service  = "UnitService",
                Method   = "v1/validate",
                Argument = @"{""Value"": ""value""}"
            });

            msg.OfflineResult();
            Console.WriteLine(msg.Result);
            var res = msg.ResultData as IApiResult;

            Assert.IsTrue(res != null && res.Success, msg.Result);
        }
예제 #18
0
        public async Task MulitArg()
        {
            var(msg, ser) = await MessagePoster.Post(new InlineMessage
            {
                ServiceName = "UnitService",
                ApiName     = "v1/mulitArg",
                Content     =
                    @"{
    ""a"" : ""string"",
    ""b"" : 0,
    ""c"" : 0,
    ""d"" : 0
}"
            });

            Assert.True(msg.State == MessageState.Success, msg.Result);
        }
예제 #19
0
        public async Task Validate()
        {
            var msg = await MessagePoster.Post(new InlineMessage
            {
                Service  = "UnitService",
                Method   = "v1/validate",
                Argument =
                    @"{
    
}"
            });

            msg.OfflineResult();
            Console.WriteLine(msg.Result);

            Assert.IsTrue(msg.State == MessageState.FormalError, msg.Result);
        }
예제 #20
0
        public async Task MulitArg()
        {
            var msg = await MessagePoster.Post(new InlineMessage
            {
                Service  = "UnitService",
                Method   = "v1/mulitArg",
                Argument =
                    @"{
    ""a"" : ""string"",
    ""b"" : 0,
    ""c"" : 0,
    ""d"" : 0
}"
            });

            Assert.IsTrue(msg.State == MessageState.Success, msg.Result);
        }
예제 #21
0
        public async Task FromConfig()
        {
            var(msg, ser) = await MessagePoster.Post(new InlineMessage
            {
                ServiceName = "UnitService",
                ApiName     = "v1/FromConfig",
                Content     =
                    @"{
    ""AppName"" : ""string"",
    ""MaxWorkThreads"" : 0,
    ""MaxIOThreads"" : 0,
    ""IsolateFolder"" : true,
    ""DataFolder"" : ""string"",
    ""ConfigFolder"" : ""string"",
    ""AddInPath"" : ""string"",
    ""EnableAddIn"" : true
}"
            });

            Assert.True(msg.State == MessageState.Success, msg.Result);
        }