private static void VerifyIsOkToCallMethod(object server, IMethodMessage msg) { bool flag = false; MarshalByRefObject marshalByRefObject = server as MarshalByRefObject; if (marshalByRefObject == null) { return; } bool fServer; Identity identity = MarshalByRefObject.GetIdentity(marshalByRefObject, out fServer); if (identity != null) { ServerIdentity serverIdentity = identity as ServerIdentity; if (serverIdentity != null && serverIdentity.MarshaledAsSpecificType) { Type serverType = serverIdentity.ServerType; if (serverType != (Type)null) { MethodBase methodBase = StackBuilderSink.GetMethodBase(msg); RuntimeType reflectedType = (RuntimeType)methodBase.DeclaringType; if ((Type)reflectedType != serverType && !reflectedType.IsAssignableFrom(serverType)) { throw new RemotingException(string.Format((IFormatProvider)CultureInfo.CurrentCulture, Environment.GetResourceString("Remoting_InvalidCallingType"), (object)methodBase.DeclaringType.FullName, (object)serverType.FullName)); } if (reflectedType.IsInterface) { StackBuilderSink.VerifyNotIRemoteDispatch(reflectedType); } flag = true; } } } if (flag) { return; } RuntimeType reflectedType1 = (RuntimeType)StackBuilderSink.GetMethodBase(msg).ReflectedType; if (!reflectedType1.IsInterface) { if (!reflectedType1.IsInstanceOfType((object)marshalByRefObject)) { throw new RemotingException(string.Format((IFormatProvider)CultureInfo.CurrentCulture, Environment.GetResourceString("Remoting_InvalidCallingType"), (object)reflectedType1.FullName, (object)marshalByRefObject.GetType().FullName)); } } else { StackBuilderSink.VerifyNotIRemoteDispatch(reflectedType1); } }
public virtual IMessage SyncProcessMessage(IMessage msg) { IMessage message = InternalSink.ValidateMessage(msg); if (message != null) { return(message); } IMethodCallMessage methodCallMessage = msg as IMethodCallMessage; LogicalCallContext logicalCallContext = null; LogicalCallContext logicalCallContext2 = Thread.CurrentThread.GetMutableExecutionContext().LogicalCallContext; object data = logicalCallContext2.GetData("__xADCall"); bool flag = false; IMessage message2; try { object server = this._server; StackBuilderSink.VerifyIsOkToCallMethod(server, methodCallMessage); LogicalCallContext logicalCallContext3; if (methodCallMessage != null) { logicalCallContext3 = methodCallMessage.LogicalCallContext; } else { logicalCallContext3 = (LogicalCallContext)msg.Properties["__CallContext"]; } logicalCallContext = CallContext.SetLogicalCallContext(logicalCallContext3); flag = true; logicalCallContext3.PropagateIncomingHeadersToCallContext(msg); StackBuilderSink.PreserveThreadPrincipalIfNecessary(logicalCallContext3, logicalCallContext); if (this.IsOKToStackBlt(methodCallMessage, server) && ((Message)methodCallMessage).Dispatch(server)) { message2 = new StackBasedReturnMessage(); ((StackBasedReturnMessage)message2).InitFields((Message)methodCallMessage); LogicalCallContext logicalCallContext4 = Thread.CurrentThread.GetMutableExecutionContext().LogicalCallContext; logicalCallContext4.PropagateOutgoingHeadersToMessage(message2); ((StackBasedReturnMessage)message2).SetLogicalCallContext(logicalCallContext4); } else { MethodBase methodBase = StackBuilderSink.GetMethodBase(methodCallMessage); object[] array = null; RemotingMethodCachedData reflectionCachedData = InternalRemotingServices.GetReflectionCachedData(methodBase); object[] args = Message.CoerceArgs(methodCallMessage, reflectionCachedData.Parameters); object ret = this.PrivateProcessMessage(methodBase.MethodHandle, args, server, out array); this.CopyNonByrefOutArgsFromOriginalArgs(reflectionCachedData, args, ref array); LogicalCallContext logicalCallContext5 = Thread.CurrentThread.GetMutableExecutionContext().LogicalCallContext; if (data != null && (bool)data && logicalCallContext5 != null) { logicalCallContext5.RemovePrincipalIfNotSerializable(); } message2 = new ReturnMessage(ret, array, (array == null) ? 0 : array.Length, logicalCallContext5, methodCallMessage); logicalCallContext5.PropagateOutgoingHeadersToMessage(message2); CallContext.SetLogicalCallContext(logicalCallContext); } } catch (Exception e) { message2 = new ReturnMessage(e, methodCallMessage); ((ReturnMessage)message2).SetLogicalCallContext(methodCallMessage.LogicalCallContext); if (flag) { CallContext.SetLogicalCallContext(logicalCallContext); } } return(message2); }
public virtual IMessageCtrl AsyncProcessMessage(IMessage msg, IMessageSink replySink) { IMethodCallMessage methodCallMessage = (IMethodCallMessage)msg; IMessageCtrl result = null; IMessage message = null; LogicalCallContext logicalCallContext = null; bool flag = false; try { try { LogicalCallContext logicalCallContext2 = (LogicalCallContext)methodCallMessage.Properties[Message.CallContextKey]; object server = this._server; StackBuilderSink.VerifyIsOkToCallMethod(server, methodCallMessage); logicalCallContext = CallContext.SetLogicalCallContext(logicalCallContext2); flag = true; logicalCallContext2.PropagateIncomingHeadersToCallContext(msg); StackBuilderSink.PreserveThreadPrincipalIfNecessary(logicalCallContext2, logicalCallContext); ServerChannelSinkStack serverChannelSinkStack = msg.Properties["__SinkStack"] as ServerChannelSinkStack; if (serverChannelSinkStack != null) { serverChannelSinkStack.ServerObject = server; } MethodBase methodBase = StackBuilderSink.GetMethodBase(methodCallMessage); object[] array = null; RemotingMethodCachedData reflectionCachedData = InternalRemotingServices.GetReflectionCachedData(methodBase); object[] args = Message.CoerceArgs(methodCallMessage, reflectionCachedData.Parameters); object ret = this.PrivateProcessMessage(methodBase.MethodHandle, args, server, out array); this.CopyNonByrefOutArgsFromOriginalArgs(reflectionCachedData, args, ref array); if (replySink != null) { LogicalCallContext logicalCallContext3 = Thread.CurrentThread.GetMutableExecutionContext().LogicalCallContext; if (logicalCallContext3 != null) { logicalCallContext3.RemovePrincipalIfNotSerializable(); } message = new ReturnMessage(ret, array, (array == null) ? 0 : array.Length, logicalCallContext3, methodCallMessage); logicalCallContext3.PropagateOutgoingHeadersToMessage(message); } } catch (Exception e) { if (replySink != null) { message = new ReturnMessage(e, methodCallMessage); ((ReturnMessage)message).SetLogicalCallContext((LogicalCallContext)methodCallMessage.Properties[Message.CallContextKey]); } } finally { if (replySink != null) { replySink.SyncProcessMessage(message); } } } finally { if (flag) { CallContext.SetLogicalCallContext(logicalCallContext); } } return(result); }
public virtual IMessage SyncProcessMessage(IMessage msg) { IMessage message = InternalSink.ValidateMessage(msg); if (message != null) { return(message); } IMethodCallMessage methodCallMessage = msg as IMethodCallMessage; LogicalCallContext logicalCallContext1 = (LogicalCallContext)null; object data = Thread.CurrentThread.GetMutableExecutionContext().LogicalCallContext.GetData("__xADCall"); bool flag = false; IMessage msg1; try { object obj = this._server; StackBuilderSink.VerifyIsOkToCallMethod(obj, (IMethodMessage)methodCallMessage); LogicalCallContext logicalCallContext2 = methodCallMessage == null ? (LogicalCallContext)msg.Properties[(object)"__CallContext"] : methodCallMessage.LogicalCallContext; logicalCallContext1 = CallContext.SetLogicalCallContext(logicalCallContext2); flag = true; logicalCallContext2.PropagateIncomingHeadersToCallContext(msg); StackBuilderSink.PreserveThreadPrincipalIfNecessary(logicalCallContext2, logicalCallContext1); if (this.IsOKToStackBlt((IMethodMessage)methodCallMessage, obj) && ((Message)methodCallMessage).Dispatch(obj)) { msg1 = (IMessage) new StackBasedReturnMessage(); ((StackBasedReturnMessage)msg1).InitFields((Message)methodCallMessage); LogicalCallContext logicalCallContext3 = Thread.CurrentThread.GetMutableExecutionContext().LogicalCallContext; logicalCallContext3.PropagateOutgoingHeadersToMessage(msg1); ((StackBasedReturnMessage)msg1).SetLogicalCallContext(logicalCallContext3); } else { MethodBase methodBase = StackBuilderSink.GetMethodBase((IMethodMessage)methodCallMessage); object[] outArgs1 = (object[])null; RemotingMethodCachedData reflectionCachedData = InternalRemotingServices.GetReflectionCachedData(methodBase); object[] args = Message.CoerceArgs((IMethodMessage)methodCallMessage, reflectionCachedData.Parameters); object ret = this.PrivateProcessMessage(methodBase.MethodHandle, args, obj, out outArgs1); this.CopyNonByrefOutArgsFromOriginalArgs(reflectionCachedData, args, ref outArgs1); LogicalCallContext logicalCallContext3 = Thread.CurrentThread.GetMutableExecutionContext().LogicalCallContext; if (data != null && (bool)data && logicalCallContext3 != null) { logicalCallContext3.RemovePrincipalIfNotSerializable(); } object[] outArgs2 = outArgs1; int outArgsCount = outArgs2 == null ? 0 : outArgs1.Length; LogicalCallContext callCtx = logicalCallContext3; IMethodCallMessage mcm = methodCallMessage; msg1 = (IMessage) new ReturnMessage(ret, outArgs2, outArgsCount, callCtx, mcm); logicalCallContext3.PropagateOutgoingHeadersToMessage(msg1); CallContext.SetLogicalCallContext(logicalCallContext1); } } catch (Exception ex) { IMethodCallMessage mcm = methodCallMessage; msg1 = (IMessage) new ReturnMessage(ex, mcm); ((ReturnMessage)msg1).SetLogicalCallContext(methodCallMessage.LogicalCallContext); if (flag) { CallContext.SetLogicalCallContext(logicalCallContext1); } } return(msg1); }
public virtual IMessageCtrl AsyncProcessMessage(IMessage msg, IMessageSink replySink) { IMethodCallMessage mcm1 = (IMethodCallMessage)msg; IMessageCtrl messageCtrl = (IMessageCtrl)null; IMessage msg1 = (IMessage)null; LogicalCallContext callCtx1 = (LogicalCallContext)null; bool flag = false; try { try { LogicalCallContext logicalCallContext1 = (LogicalCallContext)mcm1.Properties[(object)Message.CallContextKey]; object server = this._server; StackBuilderSink.VerifyIsOkToCallMethod(server, (IMethodMessage)mcm1); callCtx1 = CallContext.SetLogicalCallContext(logicalCallContext1); flag = true; IMessage msg2 = msg; logicalCallContext1.PropagateIncomingHeadersToCallContext(msg2); LogicalCallContext threadCallContext = callCtx1; StackBuilderSink.PreserveThreadPrincipalIfNecessary(logicalCallContext1, threadCallContext); ServerChannelSinkStack channelSinkStack = msg.Properties[(object)"__SinkStack"] as ServerChannelSinkStack; if (channelSinkStack != null) { channelSinkStack.ServerObject = server; } MethodBase methodBase = StackBuilderSink.GetMethodBase((IMethodMessage)mcm1); object[] outArgs1 = (object[])null; RemotingMethodCachedData reflectionCachedData = InternalRemotingServices.GetReflectionCachedData(methodBase); object[] args = Message.CoerceArgs((IMethodMessage)mcm1, reflectionCachedData.Parameters); object obj = this.PrivateProcessMessage(methodBase.MethodHandle, args, server, out outArgs1); this.CopyNonByrefOutArgsFromOriginalArgs(reflectionCachedData, args, ref outArgs1); if (replySink != null) { LogicalCallContext logicalCallContext2 = Thread.CurrentThread.GetMutableExecutionContext().LogicalCallContext; if (logicalCallContext2 != null) { logicalCallContext2.RemovePrincipalIfNotSerializable(); } object ret = obj; object[] outArgs2 = outArgs1; int outArgsCount = outArgs2 == null ? 0 : outArgs1.Length; LogicalCallContext callCtx2 = logicalCallContext2; IMethodCallMessage mcm2 = mcm1; msg1 = (IMessage) new ReturnMessage(ret, outArgs2, outArgsCount, callCtx2, mcm2); logicalCallContext2.PropagateOutgoingHeadersToMessage(msg1); } } catch (Exception ex) { if (replySink != null) { msg1 = (IMessage) new ReturnMessage(ex, mcm1); ((ReturnMessage)msg1).SetLogicalCallContext((LogicalCallContext)mcm1.Properties[(object)Message.CallContextKey]); } } finally { if (replySink != null) { replySink.SyncProcessMessage(msg1); } } } finally { if (flag) { CallContext.SetLogicalCallContext(callCtx1); } } return(messageCtrl); }