#pragma warning disable 169
        private static ProcessMessageRes ProcessMessageInDomain(
            byte[] arrRequest,
            CADMethodCallMessage cadMsg)
        {
            ProcessMessageRes res = new ProcessMessageRes();

            try
            {
                AppDomain.CurrentDomain.ProcessMessageInDomain(arrRequest, cadMsg, out res.arrResponse, out res.cadMrm);
            }
            catch (Exception e)
            {
                IMessage errorMsg = new MethodResponse(e, new ErrorMessage());
                res.arrResponse = CADSerializer.SerializeMessage(errorMsg).GetBuffer();
            }
            return(res);
        }
Beispiel #2
0
#pragma warning disable 169
		private static ProcessMessageRes ProcessMessageInDomain (
			byte[] arrRequest,
			CADMethodCallMessage cadMsg)
	    {
			ProcessMessageRes res = new ProcessMessageRes ();

			try 
			{
				AppDomain.CurrentDomain.ProcessMessageInDomain (arrRequest, cadMsg, out res.arrResponse, out res.cadMrm);
			}
			catch (Exception e) 
			{
				IMessage errorMsg = new MethodResponse (e, new ErrorMessage());
				res.arrResponse = CADSerializer.SerializeMessage (errorMsg).GetBuffer(); 
			}
			return res;
		}
#pragma warning restore 169

        public virtual IMessage SyncProcessMessage(IMessage msgRequest)
        {
            IMessage retMessage = null;

            try
            {
                // Time to transit into the "our" domain
                byte [] arrResponse = null;
                byte [] arrRequest  = null;

                CADMethodReturnMessage cadMrm = null;
                CADMethodCallMessage   cadMsg;

                cadMsg = CADMethodCallMessage.Create(msgRequest);
                if (null == cadMsg)
                {
                    // Serialize the request message
                    MemoryStream reqMsgStream = CADSerializer.SerializeMessage(msgRequest);
                    arrRequest = reqMsgStream.GetBuffer();
                }

                Context currentContext = Thread.CurrentContext;

                try
                {
                    // InternalInvoke can't handle out arguments, this is why
                    // we return the results in a structure
                    ProcessMessageRes res = (ProcessMessageRes)AppDomain.InvokeInDomainByID(_domainID, processMessageMethod, null, new object [] { arrRequest, cadMsg });
                    arrResponse = res.arrResponse;
                    cadMrm      = res.cadMrm;
                }
                finally
                {
                    AppDomain.InternalSetContext(currentContext);
                }


                if (null != arrResponse)
                {
                    // Time to deserialize the message
                    MemoryStream respMsgStream = new MemoryStream(arrResponse);

                    // Deserialize the response message
                    retMessage = CADSerializer.DeserializeMessage(respMsgStream, msgRequest as IMethodCallMessage);
                }
                else
                {
                    retMessage = new MethodResponse(msgRequest as IMethodCallMessage, cadMrm);
                }
            }
            catch (Exception e)
            {
                try
                {
                    retMessage = new ReturnMessage(e, msgRequest as IMethodCallMessage);
                }
                catch (Exception)
                {
                    // this is just to be sure
                }
            }

            return(retMessage);
        }