/// <summary> /// Replaces delegate parameters with call interceptors. /// </summary> /// <param name="message">Remoting message</param> /// <returns>Parameters</returns> private object[] InterceptDelegateParameters(IMethodCallMessage message) { object[] result = new object[message.ArgCount]; ParameterInfo[] paramDefs = message.MethodBase.GetParameters(); for (int i = 0; i < message.ArgCount; i++) { object arg = message.Args[i]; if (arg != null && typeof(Delegate).IsAssignableFrom(arg.GetType())) { DelegateInterceptor interceptor = new DelegateInterceptor() { ClientDelegate = arg }; result[i] = interceptor; } else { Type argType = paramDefs[i].ParameterType; Type handledType; ISerializationHandler handler; _connection.SerializationHandling.FindMatchingSerializationHandler(argType, out handledType, out handler); if (handler != null) { byte[] raw = handler.Serialize(arg); result[i] = new CustomSerializationContainer(handledType, argType, raw); } else { // 1:1 result[i] = arg; } } } return(result); }
/// <summary> /// Replaces delegate parameters with call interceptors. /// </summary> /// <param name="message">Remoting message</param> /// <returns>Parameters</returns> private object[] InterceptDelegateParameters(IMethodCallMessage message) { object[] result = new object[message.ArgCount]; ParameterInfo[] paramDefs = message.MethodBase.GetParameters(); for (int i = 0; i < message.ArgCount; i++) { object arg = message.Args[i]; if (arg != null && typeof(Delegate).IsAssignableFrom(arg.GetType())) { DelegateInterceptor interceptor = new DelegateInterceptor() { ClientDelegate = arg }; result[i] = interceptor; } else { Type argType = paramDefs[i].ParameterType; Type handledType; ISerializationHandler handler; _connection.SerializationHandling.FindMatchingSerializationHandler(argType, out handledType, out handler); if (handler != null) { byte[] raw = handler.Serialize(arg); result[i] = new CustomSerializationContainer(handledType, argType, raw); } else // 1:1 result[i] = arg; } } return result; }