开发者

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

开发者 https://www.devze.com 2023-04-08 06:50 出处:网络
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?

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:

  • How to add a custom HTTP header to every WCF call?
  • SoapHeader Class (System.Web.Services.Protocols) | Microsoft Docs

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消