示例#1
0
        /// <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);
        }
示例#2
0
        /// <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);
        }