// // Copyright (c) ZeroC, Inc. All rights reserved. // namespace Ice { /// /// Base class that allows a server intercept incoming requests. /// The application must derive a concrete class from DispatchInterceptor /// that implements the DispatchInterceptor.dispatch operation. An instance of this derived /// class can be registered with an object adapter like any other servant. /// A dispatch interceptor is useful particularly to automatically retry requests /// that have failed due to a recoverable error condition. /// public abstract class DispatchInterceptor : ObjectImpl { /// /// Called by the Ice run time to dispatch an incoming request. The implementation /// of dispatch must dispatch the request to the actual servant. /// /// The details of the incoming request. /// The task if dispatched asynchronously, null otherwise. public abstract System.Threading.Tasks.Task dispatch(Request request); public override System.Threading.Tasks.Task iceDispatch(IceInternal.Incoming inc, Current current) { try { return dispatch(inc); } catch(Exception) { // // If the input parameters weren't read, make sure we skip them here. It's needed to read the // encoding version used by the client to eventually marshal the user exception. It's also needed // if we dispatch a batch oneway request to read the next batch request. // #pragma warning disable CS8073 // The result of the expression is always 'false' if (current.encoding == null || (current.encoding.major == 0 && current.encoding.minor == 0)) #pragma warning restore CS8073 // The result of the expression is always 'false' { inc.skipReadParams(); } throw; } } } }