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)); }