示例#1
0
        private TResponse ExecSync <TResponse>(object request)
        {
            if (HostContext.AppHost.GatewayRequestFilter != null)
            {
                HostContext.AppHost.GatewayRequestFilter(req, request);
                if (req.Response.IsClosed)
                {
                    return(default(TResponse));
                }
            }

            if (HostContext.HasPlugin <ValidationFeature>())
            {
                var validator = ValidatorCache.GetValidator(req, request.GetType());
                if (validator != null)
                {
                    var ruleSet = (string)(req.GetItem(Keywords.InvokeVerb) ?? req.Verb);
                    var result  = validator.Validate(new ValidationContext(
                                                         request, null, new MultiRuleSetValidatorSelector(ruleSet))
                    {
                        Request = req
                    });
                    if (!result.IsValid)
                    {
                        throw new ValidationException(result.Errors);
                    }
                }
            }

            var response     = HostContext.ServiceController.Execute(request, req);
            var responseTask = response as Task;

            if (responseTask != null)
            {
                response = responseTask.GetResult();
            }

            return(ConvertToResponse <TResponse>(response));
        }