WCF + Message Contract – to encapsulate the SOAP Request & the SOAP Response Envelop with Header & Body Message

WCF + Message Contract – to encapsulate the SOAP Request & the SOAP Response Envelop with Header & Body Message

   ( SOAP Server ) IService.cs
 
   using System;
   using System.Runtime.Serialization;
   using System.ServiceModel;
   using System.ServiceModel.Web;
 
   namespace WCFService
   {
      [ServiceContract]
      public interface IService
      {
         [OperationContract]
         Output GetData(Input value);
      }
 
      [MessageContract]
      public class Input
      {
         [MessageHeader]
         public string InputHeader;
         [MessageBodyMember]
         public string InputBodyMember;
      }
 
      [MessageContract]
      public class Output
      {
         [MessageHeader]
         public OutputHeader OutputHeader;
         [MessageBodyMember]
         public Data OutputBodyMember;
      }
 
      [DataContract]
      public class Data
      {
         [DataMember]
         public string itema;
         [DataMember]
         public string itemb;
      }
 
      [DataContract]
      public class OutputHeader
      {
         [DataMember]
         public string headera;
         [DataMember]
         public string headerb;
      }
   }
 
   ( SOAP Server ) Service.svc.cs
 
   using System;
   using System.Runtime.Serialization;
   using System.ServiceModel;
   using System.ServiceModel.Web;
 
   namespace WCFService
   {
      public class Service : IService
      {
         public Output GetData(Input value)
         {
            Output aoutput = new Output();
 
            output.OutputBodyMember = new Data();
            output.OutputHeader = new OutputHeader();
 
            output.OutputBodyMember.itema = value.InputBodyMember + " : 1";
            output.OutputBodyMember.itemb = value.InputBodyMember + " : 2";
 
            output.OutputHeader.headera = value.InputHeader + " : Header 1";
            output.OutputHeader.headerb = value.InputHeader + " : Header 2";
 
            return output;
         }
      }
   }
 
   ( SOAP Client ) Main.cs
 
   using System;
   using System.Collections.Generic;
   using System.ServiceModel;
   using WCFConsoleApp.HeaderServiceReference;
   using System.Configuration;
 
   namespace WCFConsoleApp
   {
      class Program
      {
         static void Main(string[] args)
         {
            EndpointAddress endpoint = new EndpointAddress(ConfigurationManager.AppSettings["SOAPEndPoint"].ToString());
            ServiceClient client = new ServiceClient(new BasicHttpBinding(), endpoint);
 
            HeaderServiceReference.Input input = new HeaderServiceReference.Input();
            input.InputBodyMember = "Body";
            input.InputHeader = "Header";
 
            HeaderServiceReference.Data data;
 
            HeaderServiceReference.OutputHeader outputheader = client.GetData(input.InputHeader, input.InputBodyMember, out data);
 
            Console.WriteLine(data.itema + " / " + data.itemb);
 
            Console.ReadLine();
         }
      }
   }
 
   SOAP Request and SOAP Response Envelop ( Execute the Result from Visual Studio or SOAPUI )
 
   <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
 
      <s:Header>
         <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">
            http://tempuri.org/IService/GetData
         </Action>
         <h:InputHeader xmlns:h="http://tempuri.org/">Header</h:InputHeader>
      </s:Header>
 
      <s:Body>
         <Input xmlns="http://tempuri.org/">
            <InputBodyMember>BodyMember</InputBodyMember>
         </Input>
      </s:Body>
 
   </s:Envelope>
 
 
   <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
 
      <s:Header>
         <h:OutputHeader xmlns:h="http://tempuri.org/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
            <headera xmlns="http://schemas.datacontract.org/2004/07/WCFService">Header : Header 1</headera>
            <headerb xmlns="http://schemas.datacontract.org/2004/07/WCFService">Header : Header 2</headerb>
         </h:OutputHeader>
      </s:Header>
 
      <s:Body>
         <Output xmlns="http://tempuri.org/">
            <OutputBodyMember
               xmlns:a="http://schemas.datacontract.org/2004/07/WCFService"
               xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
               <a:itema>BodyMember : Body 1</a:itema>
               <a:itemb>BodyMember : Body 2</a:itemb>
            </OutputBodyMember>
         </Output>
      </s:Body>
 
   </s:Envelope>