internal IMessage NotifyActivatorProperties(IMessage msg, bool bServerSide) { IMessage message = null; try { int index = this._numCtxProps; object obj2 = null; while (index-- != 0) { obj2 = this._ctxProps[index]; IContextPropertyActivator activator = obj2 as IContextPropertyActivator; if (activator != null) { IConstructionCallMessage message2 = msg as IConstructionCallMessage; if (message2 != null) { if (!bServerSide) { activator.CollectFromClientContext(message2); } else { activator.DeliverClientContextToServerContext(message2); } } else if (bServerSide) { activator.CollectFromServerContext((IConstructionReturnMessage)msg); } else { activator.DeliverServerContextToClientContext((IConstructionReturnMessage)msg); } } } } catch (Exception exception) { IMethodCallMessage mcm = null; if (msg is IConstructionCallMessage) { mcm = (IMethodCallMessage)msg; } else { mcm = new ErrorMessage(); } message = new ReturnMessage(exception, mcm); if (msg != null) { ((ReturnMessage)message).SetLogicalCallContext((LogicalCallContext)msg.Properties[Message.CallContextKey]); } } return(message); }
internal IMessage NotifyActivatorProperties(IMessage msg, bool bServerSide) { IMessage message = (IMessage)null; try { int index = this._numCtxProps; while (index-- != 0) { IContextPropertyActivator propertyActivator = this._ctxProps[index] as IContextPropertyActivator; if (propertyActivator != null) { IConstructionCallMessage msg1 = msg as IConstructionCallMessage; if (msg1 != null) { if (!bServerSide) { propertyActivator.CollectFromClientContext(msg1); } else { propertyActivator.DeliverClientContextToServerContext(msg1); } } else if (bServerSide) { propertyActivator.CollectFromServerContext((IConstructionReturnMessage)msg); } else { propertyActivator.DeliverServerContextToClientContext((IConstructionReturnMessage)msg); } } } } catch (Exception ex) { IMethodCallMessage mcm = !(msg is IConstructionCallMessage) ? (IMethodCallMessage) new ErrorMessage() : (IMethodCallMessage)msg; message = (IMessage) new ReturnMessage(ex, mcm); if (msg != null) { ((ReturnMessage)message).SetLogicalCallContext((LogicalCallContext)msg.Properties[(object)Message.CallContextKey]); } } return(message); }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //~~~~~~~~~~~~~~~~~~~ Activation Support ~~~~~~~~~~~~~~~~~~~~~~~~ //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ internal IMessage NotifyActivatorProperties( IMessage msg, bool bServerSide) { BCLDebug.Assert((msg is IConstructionCallMessage) || (msg is IConstructionReturnMessage), "Bad activation msg type"); BCLDebug.Assert(!((msg is IConstructionCallMessage) && (msg is IConstructionReturnMessage)), "Activation message cannot be both call & return type"); BCLDebug.Assert((_ctxFlags & CTX_FROZEN) == CTX_FROZEN, "ServerContext not frozen during activation!"); // Any exception thrown by the notifications is caught and // folded into a return message to return to the caller. IMessage errMsg = null; try { // Since the context is frozen the properties array is in // effect read-only! int iProp = _numCtxProps; Object prop = null; while (iProp-- != 0) { // see if this property is interested in Activation prop = _ctxProps[iProp]; IContextPropertyActivator activator = prop as IContextPropertyActivator; if (null != activator) { // yes, notify as appropriate IConstructionCallMessage ccm = msg as IConstructionCallMessage; if (null != ccm) { // IConsructionCallMessage on its way forward if (!bServerSide) { // activation starting at client side activator.CollectFromClientContext(ccm); } else { activator.DeliverClientContextToServerContext(ccm); } } else { // IConstructionReturnMessage on its way back if (bServerSide) { // activation returning from server side activator.CollectFromServerContext((IConstructionReturnMessage)msg); } else { // activation back at client side activator.DeliverServerContextToClientContext((IConstructionReturnMessage)msg); } } } } } catch (Exception e) { IMethodCallMessage mcm = null; if (msg is IConstructionCallMessage) { mcm = (IMethodCallMessage)msg; } else { mcm = new ErrorMessage(); } errMsg = new ReturnMessage(e, mcm); if (msg != null) { ((ReturnMessage)errMsg).SetLogicalCallContext( (LogicalCallContext) msg.Properties[Message.CallContextKey]); } } return(errMsg); }