/// <summary> /// This method will be called from the client side just before any method is called. /// </summary> /// <param name="request"></param> /// <param name="channel"></param> /// <returns></returns> public object BeforeSendRequest(ref Message request, IClientChannel channel) { // Prepare the request message copy to be modified MessageBuffer buffer = request.CreateBufferedCopy(Int32.MaxValue); request = buffer.CreateMessage(); ServiceHeader customData = new ServiceHeader(); customData.System = ClientContext.System; customData.Token = ClientContext.Token; customData.IdUser = ClientContext.IdUser; customData.UserLogin = ClientContext.UserLogin; customData.WebSessionId = ClientContext.WebSessionId; customData.ClientIP = ClientContext.ClientIP; customData.ClientDate = ClientContext.ClientDate; customData.ClientVersion = ClientContext.ClientVersion; CustomHeader header = new CustomHeader(customData); // Add the custom header to the request. request.Headers.Add(header); return(null); }
/// <summary> /// This method is called on the server when a request is received from the client. /// </summary> /// <param name="request"></param> /// <param name="channel"></param> /// <param name="instanceContext"></param> /// <returns></returns> public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext) { // Create a copy of the original message so that we can mess with it. MessageBuffer buffer = request.CreateBufferedCopy(Int32.MaxValue); request = buffer.CreateMessage(); Message messageCopy = buffer.CreateMessage(); // Read the custom context data from the headers ServiceHeader customData = CustomHeader.ReadHeader(request); // Add an extension to the current operation context so // that our custom context can be easily accessed anywhere. ServerContext customContext = new ServerContext(); if (customData != null) { customContext.System = customData.System; customContext.Token = customData.Token; customContext.IdUser = customData.IdUser; customContext.UserLogin = customData.UserLogin; customContext.WebSessionId = customData.WebSessionId; customContext.ClientIP = customData.ClientIP; customContext.ClientDate = customData.ClientDate; customContext.ClientVersion = customData.ClientVersion; } OperationContext.Current.IncomingMessageProperties.Add( "CurrentContext", customContext); return(null); }
public static ServiceHeader ReadHeader(Message request) { Int32 headerPosition = request.Headers.FindHeader(CUSTOM_HEADER_NAME, CUSTOM_HEADER_NAMESPACE); if (headerPosition == -1) { return(null); } MessageHeaderInfo headerInfo = request.Headers[headerPosition]; XmlNode[] content = request.Headers.GetHeader <XmlNode[]>(headerPosition); string text = content[0].InnerText; XmlSerializer deserializer = new XmlSerializer(typeof(ServiceHeader)); TextReader textReader = new StringReader(text); ServiceHeader customData = (ServiceHeader)deserializer.Deserialize(textReader); textReader.Close(); return(customData); }
public CustomHeader(ServiceHeader customData) { _customData = customData; }