WCF Web Services ( SOAP Server ) – Read SOAP Envelope Header InnerXML Value from the SOAP Request ( "Service Contract" Based )

WCF Web Services ( SOAP Server ) – Read SOAP Envelope Header InnerXML Value from the SOAP Request ( "Service Contract" Based )

 
   using System;
   using System.Collections.Generic;
   using System.Linq;
   using System.Runtime.Serialization;
   using System.ServiceModel;
   using System.ServiceModel.Web;
   using System.Text;
   using ICMS_DAO.Entity;
   using ICMS_DAO.DAO;
   using System.Web.Services;
   using System.Web.Services.Protocols;
   using System.Xml;
 
   namespace APPS_WCF
   {
 
      public class SOAPLib
      {
 
         private int GetRootHeaderIndex(string name, string ns)
         {
 
            int i = 0;
 
            foreach(var item in OperationContext.Current.IncomingMessageHeaders)
            {
 
               if(item.Name.ToUpper().Equals(name.ToUpper()))
               {
                  return i;
               }
 
               i++;
 
            }
 
            return 9999;
 
         }
 
         private string GetSubHeaderValue(string name, string ns, string subheadname)
         {
 
            if (OperationContext.Current.IncomingMessageHeaders.Count > 0)
            {
 
               int i = GetRootHeaderIndex(name, ns);
               String Value = "";
 
               if(i != 9999)
               {
 
                  XmlReader reader = OperationContext.Current.IncomingMessageHeaders.GetReaderAtHeader(i).ReadSubtree();
 
                  while (reader != null)
                  {
                     if (reader.Name.ToUpper().Contains(subheadname.ToUpper()))
                     {
                        Value = reader.ReadInnerXml();
                        //reader.Close();
                        //return Value;
                     }
 
                     reader.Read();
                  }
 
               }
 
               return Value;
 
            }
            else
            {
               return "";
            }
 
         }
 
      }
 
   }
 
   String header = GetSubHeaderValue("Security", "n1", "CertificateHash").Replace("\n", "");