Exemple #1
0
        public virtual IMessage SyncProcessMessage(IMessage msgRequest)
        {
            IMessage result = null;

            try
            {
                byte[] array  = null;
                byte[] array2 = null;
                CADMethodReturnMessage retmsg = null;
                CADMethodCallMessage   cadmethodCallMessage = CADMethodCallMessage.Create(msgRequest);
                if (cadmethodCallMessage == null)
                {
                    MemoryStream memoryStream = CADSerializer.SerializeMessage(msgRequest);
                    array2 = memoryStream.GetBuffer();
                }
                Context currentContext = Thread.CurrentContext;
                try
                {
                    CrossAppDomainSink.ProcessMessageRes processMessageRes = (CrossAppDomainSink.ProcessMessageRes)AppDomain.InvokeInDomainByID(this._domainID, CrossAppDomainSink.processMessageMethod, null, new object[]
                    {
                        array2,
                        cadmethodCallMessage
                    });
                    array  = processMessageRes.arrResponse;
                    retmsg = processMessageRes.cadMrm;
                }
                finally
                {
                    AppDomain.InternalSetContext(currentContext);
                }
                if (array != null)
                {
                    MemoryStream mem = new MemoryStream(array);
                    result = CADSerializer.DeserializeMessage(mem, msgRequest as IMethodCallMessage);
                }
                else
                {
                    result = new MethodResponse(msgRequest as IMethodCallMessage, retmsg);
                }
            }
            catch (Exception e)
            {
                try
                {
                    result = new ReturnMessage(e, msgRequest as IMethodCallMessage);
                }
                catch (Exception)
                {
                }
            }
            return(result);
        }
Exemple #2
0
 private static CrossAppDomainSink.ProcessMessageRes ProcessMessageInDomain(byte[] arrRequest, CADMethodCallMessage cadMsg)
 {
     CrossAppDomainSink.ProcessMessageRes result = default(CrossAppDomainSink.ProcessMessageRes);
     try
     {
         AppDomain.CurrentDomain.ProcessMessageInDomain(arrRequest, cadMsg, out result.arrResponse, out result.cadMrm);
     }
     catch (Exception e)
     {
         IMessage msg = new MethodResponse(e, new ErrorMessage());
         result.arrResponse = CADSerializer.SerializeMessage(msg).GetBuffer();
     }
     return(result);
 }
#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);
        }