Example #1
0
        /// <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);
        }
Example #2
0
        /// <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;
        }