简体   繁体   中英

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

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());

        }
    }
}

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."

Since the information you provide is not detailed enough only some general pointers:

The above links contains solutions including sample code for WCF (first link) and SOAP (second link)...

EDIT - as per comments:

This article (archived) gives you a complete walkthrough on implementing custom SOAP headers and setting them before calling the respective service.

Bascially you need to extend the Test.TestServicesClient class with the TestHeader you defined and then you can just set its value before calling a method of the web service.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM