public ServerCallFilterHandler CreateHandler(object service, ServerCallContext context) { var filters = new IServerFilter[FilterFactories.Length]; for (var i = 0; i < FilterFactories.Length; i++) { filters[i] = CreateFilter(FilterFactories[i]); } var filterContext = new ServerFilterContext( service, context, ServiceProvider, ContractMethodDefinition, _getServiceMethodInfo, new RequestContext(_requestMessageProxy, _requestStreamProxy), new ResponseContext(_responseMessageProxy, _responseStreamProxy)); return(new ServerCallFilterHandler(filterContext, filters)); }
private static PerformedContext InvokePerformFilter( IServerFilter filter, PerformingContext preContext, Func <PerformedContext> continuation) { try { preContext.Profiler.InvokeMeasured( filter, x => x.OnPerforming(preContext), $"OnPerforming for {preContext.BackgroundJob.Id}"); } catch (Exception filterException) { CoreBackgroundJobPerformer.HandleJobPerformanceException( filterException, preContext.CancellationToken.ShutdownToken); throw; } if (preContext.Canceled) { return(new PerformedContext( preContext, null, true, null)); } var wasError = false; PerformedContext postContext; try { postContext = continuation(); } catch (Exception ex) { wasError = true; postContext = new PerformedContext( preContext, null, false, ex); try { postContext.Profiler.InvokeMeasured( filter, x => x.OnPerformed(postContext), $"OnPerformed for {postContext.BackgroundJob.Id}"); } catch (Exception filterException) { CoreBackgroundJobPerformer.HandleJobPerformanceException( filterException, postContext.CancellationToken.ShutdownToken); throw; } if (!postContext.ExceptionHandled) { throw; } } if (!wasError) { try { postContext.Profiler.InvokeMeasured( filter, x => x.OnPerformed(postContext), $"OnPerformed for {postContext.BackgroundJob.Id}"); } catch (Exception filterException) { CoreBackgroundJobPerformer.HandleJobPerformanceException( filterException, postContext.CancellationToken.ShutdownToken); throw; } } return(postContext); }
public TestServerFilterRegistrationAttribute(int order, IServerFilter filter) : base(order) { _filter = filter; }
private static PerformedContext InvokePerformFilter( IServerFilter filter, PerformingContext preContext, Func <PerformedContext> continuation) { try { filter.OnPerforming(preContext); } catch (OperationCanceledException) { throw; } catch (Exception filterException) { throw new JobPerformanceException( "An exception occurred during execution of one of the filters", filterException); } if (preContext.Canceled) { return(new PerformedContext( preContext, null, true, null)); } var wasError = false; PerformedContext postContext; try { postContext = continuation(); } catch (Exception ex) { wasError = true; postContext = new PerformedContext( preContext, null, false, ex); try { filter.OnPerformed(postContext); } catch (Exception filterException) { throw new JobPerformanceException( "An exception occurred during execution of one of the filters", filterException); } if (!postContext.ExceptionHandled) { throw; } } if (!wasError) { try { filter.OnPerformed(postContext); } catch (OperationCanceledException) { throw; } catch (Exception filterException) { throw new JobPerformanceException( "An exception occurred during execution of one of the filters", filterException); } } return(postContext); }
private static PerformedContext InvokePerformFilter( IServerFilter filter, PerformingContext preContext, Func<PerformedContext> continuation) { try { filter.OnPerforming(preContext); } catch (OperationCanceledException) { throw; } catch (Exception filterException) { throw new JobPerformanceException( "An exception occurred during execution of one of the filters", filterException); } if (preContext.Canceled) { return new PerformedContext( preContext, null, true, null); } var wasError = false; PerformedContext postContext; try { postContext = continuation(); } catch (Exception ex) { wasError = true; postContext = new PerformedContext( preContext, null, false, ex); try { filter.OnPerformed(postContext); } catch (Exception filterException) { throw new JobPerformanceException( "An exception occurred during execution of one of the filters", filterException); } if (!postContext.ExceptionHandled) { throw; } } if (!wasError) { try { filter.OnPerformed(postContext); } catch (OperationCanceledException) { throw; } catch (Exception filterException) { throw new JobPerformanceException( "An exception occurred during execution of one of the filters", filterException); } } return postContext; }
private static PerformedContext InvokePerformFilter( IServerFilter filter, PerformingContext preContext, Func<PerformedContext> continuation) { try { filter.OnPerforming(preContext); } catch (Exception filterException) { CoreBackgroundJobPerformer.HandleJobPerformanceException( filterException, preContext.CancellationToken.ShutdownToken); throw; } if (preContext.Canceled) { return new PerformedContext( preContext, null, true, null); } var wasError = false; PerformedContext postContext; try { postContext = continuation(); } catch (Exception ex) { wasError = true; postContext = new PerformedContext( preContext, null, false, ex); try { filter.OnPerformed(postContext); } catch (Exception filterException) { CoreBackgroundJobPerformer.HandleJobPerformanceException( filterException, postContext.CancellationToken.ShutdownToken); throw; } if (!postContext.ExceptionHandled) { throw; } } if (!wasError) { try { filter.OnPerformed(postContext); } catch (Exception filterException) { CoreBackgroundJobPerformer.HandleJobPerformanceException( filterException, postContext.CancellationToken.ShutdownToken); throw; } } return postContext; }