Exemplo n.º 1
0
        public IMessageCtrl AsyncProcessMessage(IMessage msg, IMessageSink replySink)
        {
                        #if !DISABLE_REMOTING
            ServerIdentity identity = (ServerIdentity)RemotingServices.GetMessageTargetIdentity(msg);

            Context oldContext = null;
            if (Threading.Thread.CurrentContext != identity.Context)
            {
                oldContext = Context.SwitchToContext(identity.Context);
            }

            try
            {
                Context.NotifyGlobalDynamicSinks(true, msg, false, true);
                Thread.CurrentContext.NotifyDynamicSinks(true, msg, false, false);
                if (replySink != null)
                {
                    replySink = new ContextRestoreSink(replySink, oldContext, msg);
                }

                IMessageCtrl res = identity.AsyncObjectProcessMessage(msg, replySink);

                if (replySink == null)
                {
                    Context.NotifyGlobalDynamicSinks(false, msg, false, false);
                    Thread.CurrentContext.NotifyDynamicSinks(false, msg, false, false);
                }

                return(res);
            }
            catch (Exception ex)
            {
                if (replySink != null)
                {
                    replySink.SyncProcessMessage(new ReturnMessage(ex, (IMethodCallMessage)msg));
                }
                return(null);
            }
            finally
            {
                if (oldContext != null)
                {
                    Context.SwitchToContext(oldContext);
                }
            }
                        #else
            return(null);
                        #endif
        }
Exemplo n.º 2
0
		public IMessageCtrl AsyncProcessMessage (IMessage msg, IMessageSink replySink)
		{
			ServerIdentity identity = (ServerIdentity) RemotingServices.GetMessageTargetIdentity (msg);
			
			Context oldContext = null;
			if (Threading.Thread.CurrentContext != identity.Context)
				oldContext = Context.SwitchToContext (identity.Context);

			try
			{
				Context.NotifyGlobalDynamicSinks (true, msg, false, true);
				Thread.CurrentContext.NotifyDynamicSinks (true, msg, false, false);
				if (replySink != null) replySink = new ContextRestoreSink (replySink, oldContext, msg);

				IMessageCtrl res = identity.AsyncObjectProcessMessage (msg, replySink);

				if (replySink == null)
				{
					Context.NotifyGlobalDynamicSinks (false, msg, false, false);
					Thread.CurrentContext.NotifyDynamicSinks (false, msg, false, false);
				}

				return res;
			}
			catch (Exception ex)
			{
				if (replySink != null)
					replySink.SyncProcessMessage (new ReturnMessage (ex, (IMethodCallMessage)msg));
				return null;
			}
			finally
			{
				if (oldContext != null)
					Context.SwitchToContext (oldContext);
			}
		}