private void SerializeContextElements(CdrOutputStream targetStream, LogicalCallContext callContext, Serializer contextElementSer) { // if no context elements specified, don't serialise a context sequence. if (m_contextElementKeys.Length > 0) { string[] contextSeq = new string[m_contextElementKeys.Length * 2]; for (int i = 0; i < m_contextElementKeys.Length; i++) { string contextKey = m_contextElementKeys[i]; contextSeq[i * 2] = contextKey; if (callContext.GetData(contextKey) != null) { contextSeq[i * 2 + 1] = callContext.GetData(contextKey).ToString(); } else { contextSeq[i * 2 + 1] = ""; } } contextElementSer.Serialize(contextSeq, targetStream); } }
/// <summary> /// process message /// </summary> public IMessage SyncProcessMessage(IMessage msg) { if (msg.Properties["__Uri"] == null) { return(this.nextSink.SyncProcessMessage(msg)); } else { LogicalCallContext callContext = (LogicalCallContext)msg.Properties["__CallContext"]; if ((callContext.GetData("__ClientID") != null) && (callContext.GetData("__ServiceID") != null)) { string clientID = (string)callContext.GetData("__ClientID"); string serviceID = (string)callContext.GetData("__ServiceID"); if (TLogging.DebugLevel >= 10) { TLogging.Log("SyncProcessMessage: " + clientID + " " + serviceID); } return(TCrossDomainMarshaller.GetService(clientID, serviceID).Marshal(msg)); } else { // TLogging.Log("SyncProcessMessage: No __ClientID or __ServiceID"); return(new ReturnMessage( new EOPAppException("No __ClientID or __ServiceID"), (IMethodCallMessage)msg)); } } }
public ServerProcessing ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, out IMessage responseMsg, out ITransportHeaders responseHeaders, out Stream responseStream) { LogicalCallContext lcc = (LogicalCallContext)requestMsg.Properties["__CallContext"]; // storing the current priority ThreadPriority oldprio = Thread.CurrentThread.Priority; // check if the logical call context contains "priority" if (lcc != null && lcc.GetData("priority") != null) { // fetch the priorty from the call context ThreadPriority priority = (ThreadPriority)lcc.GetData("priority"); Console.WriteLine(" -> Pre-execution priority change {0} to {1}", oldprio.ToString(), priority.ToString()); // set the priority Thread.CurrentThread.Priority = priority; } // push on the stack and pass the call to the next sink // the old priority will be used as "state" for the response sinkStack.Push(this, oldprio); ServerProcessing spres = _next.ProcessMessage(sinkStack, requestMsg, requestHeaders, requestStream, out responseMsg, out responseHeaders, out responseStream); //restore priority if call is not asynchronous if (spres != ServerProcessing.Async) { if (lcc != null && lcc.GetData("priority") != null) { Console.WriteLine(" -> Post-execution change back to {0}", oldprio); Thread.CurrentThread.Priority = oldprio; } } return(spres); }
public LogicalTicket(IMessage imsg) { if (imsg != null) { object obj = imsg.Properties["__CallContext"]; if (obj != null && obj is LogicalCallContext) { LogicalCallContext lcc = obj as LogicalCallContext; object ticket = lcc.GetData("___Ticket"); if (ticket != null && ticket is LogicalTicket) { LogicalTicket lt = ticket as LogicalTicket; for (int ii = 0; ii < lt.Count; ii++) { base[lt.GetKey(ii)] = lt.Get(ii); } } } } }