示例#1
0
        public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel, System.ServiceModel.InstanceContext instanceContext)
        {
            LogManager.GetLogger().Debug("AfterReceiveRequest");
            MessageBuffer buffer = request.CreateBufferedCopy(Int32.MaxValue);

            request = buffer.CreateMessage();
            //  System.ServiceModel.Channels.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.UserID           = customData.UserID;
                customContext.KerberosID       = customData.KerberosID;
                customContext.SiteminderToken  = customData.SiteminderToken;
                customContext.UserHeaderToken  = customData.UserToken;
                customContext.VerificationCode = customData.VerificationCode;
            }
            if (OperationContext.Current.IncomingMessageProperties.ContainsKey("CurrentContext"))
            {
                OperationContext.Current.IncomingMessageProperties.Remove("CurrentContext");
            }
            OperationContext.Current.IncomingMessageProperties.Add(
                "CurrentContext", customContext);
            //*****************
            object result;

            request.Properties.TryGetValue(TextOrMtomEncodingBindingElement.IsIncomingMessageMtomPropertyName, out result);
            return(result);
        }
示例#2
0
        public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel)
        {
            LogManager.GetLogger().Debug("BeforeSendRequest");
            MessageBuffer buffer = request.CreateBufferedCopy(Int32.MaxValue);

            request = buffer.CreateMessage();

            ServiceHeader customData = new ServiceHeader();

            customData.KerberosID       = ClientContextBucket.KerberosID;
            customData.SiteminderToken  = ClientContextBucket.SiteminderToken;
            customData.UserID           = ClientContextBucket.UserID;
            customData.UserToken        = ClientContextBucket.UserHeaderToken;
            customData.VerificationCode = ClientContextBucket.VerificationCode;
            CustomHeader header = new CustomHeader(customData);

            // Add the custom header to the request.
            request.Headers.Add(header);

            return(null);
        }
示例#3
0
        public static ServiceHeader ReadHeader(System.ServiceModel.Channels.Message request)
        {
            Int32 headerPosition = request.Headers.FindHeader(CUSTOM_HEADER_NAME, CUSTOM_HEADER_NAMESPACE);

            if (headerPosition == -1)
            {
                // this header is for external request for example ikco
                Int32 extHeaderPosition = request.Headers.FindHeader(External_CUSTOM_HEADER_NAME, CUSTOM_HEADER_NAMESPACE);
                if (extHeaderPosition == -1)
                {
                    return(null);
                }
                MessageHeaderInfo extHeaderInfo = request.Headers[extHeaderPosition];

                XmlNode[] extContent = request.Headers.GetHeader <XmlNode[]>(extHeaderPosition);



                ServiceHeader customExternalData = XmlSerializerHelper.DeserializeNodes <ServiceHeader>(extContent);
                return(customExternalData);
            }


            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);
        }
示例#4
0
 public CustomHeader(ServiceHeader customData)
 {
     _customData = customData;
 }