5

"TestHeader"我设置了我的网络服务来接收带有参数的肥皂标题"Name"

如何在我的客户端创建一个肥皂头并将其发送到服务?

到目前为止,我已经在我的客户端中创建了它。

public class TestHeader : SoapHeader
{
    public String Name;
}

初始化我的服务,

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

初始化我的标题。

  TestHeader header = new TestHeader();

在标题中设置变量

header.Name = "BoB";

怎么办?我试过关注 MSDN 和其他教程,但没有得到任何结果。

测试服务.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());

        }
    }
}
4

2 回答 2

5

我想我有点晚了,但这是答案:

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

这是一个澄清主题的链接:“...Visual Studio 将在 Web 服务代理中创建一个名为 'UserCredentialsValue' 的属性,它将映射 Web 服务中的 'consumer' 公共属性 [从 SoapHeader 继承]。”

于 2012-11-14T22:10:43.223 回答
2

由于您提供的信息不够详细,因此只有一些一般性指针:

以上链接包含解决方案,包括 WCF(第一个链接)和 SOAP(第二个链接)的示例代码......

编辑 - 根据评论:

本文(已存档)为您提供了有关实现自定义 SOAP 标头并在调用相应服务之前设置它们的完整演练。

基本上,您需要Test.TestServicesClient使用您定义的类扩展类,TestHeader然后您可以在调用 Web 服务的方法之前设置它的值。

于 2011-09-26T11:23:40.627 回答