How do I attach a SOAP Header to my C# client?

IAmGroot picture IAmGroot · Sep 26, 2011 · Viewed 47.7k times · Source

I have my web service set up to recieve a soap header of name "TestHeader" with param "Name"

How do i create a soap header in my client AND send it to the service?

So far I have created it in my client.

public class TestHeader : SoapHeader
{
    public String Name;
}

Initialised my service,

    Test.TestServicesClient SOAP = new Test.TestServicesClient();

Initialised my header.

  TestHeader header = new TestHeader();

set variable in header

header.Name = "BoB";

Now what? Ive tried following MSDN, and other tutorials but not got anywhere.

TestService.cs

using System;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Security.Cryptography;
using System.Runtime.InteropServices;
using System.ServiceModel.Dispatcher;
using System.ServiceModel.Channels;

namespace Test
{

    // Define a SOAP header by deriving from the SoapHeader class.
    public class TestHeader : SoapHeader
    {
        public String Name;
    }

   public class TestService : ITestServices
    {      

        public TestHeader TestInHeader;


       [WebMethod]
        [SoapHeader("TestInHeader", Direction = SoapHeaderDirection.In)]
        public List<ServiceDetails> GetServiceDetails(Int32 CostCentreNo, Int32 ServiceCode, Boolean Recurring)
        {
            throw new System.Exception(TestInHeader.ToString());

        }
    }
}

Answer

BKM picture BKM · Nov 14, 2012

I guess I'm a little late, but here's the answer:

    Test.TestHeader header = new Test.TestHeader();
    header.Name = "BoB";
    Test.TestService SOAP = new Test.TestService();
    SOAP.TestHeaderValue = header;
    SOAP.GetServiceDetails(0,0,False);

Here's a LINK that clarifies the subject: "...Visual Studio will create a property in web service proxy called 'UserCredentialsValue' which will map the 'consumer' public property [which inherits from SoapHeader] in the web service."