如何将 SOAP 标头附加到我的 C# 客户端?

Posted

技术标签:

【中文标题】如何将 SOAP 标头附加到我的 C# 客户端?【英文标题】:How do I attach a SOAP Header to my C# client? 【发布时间】:2011-11-25 03:15:40 【问题描述】:

我的网络服务设置为接收名称为"TestHeader" 的soap 标头,参数为"Name"

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

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

public class TestHeader : SoapHeader

    public String Name;

初始化我的服务,

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

初始化我的标题。

  TestHeader header = new TestHeader();

在标题中设置变量

header.Name = "BoB";

现在呢?我试过关注 MSDN 和其他教程,但没有得到任何结果。

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

        
    

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

由于您提供的信息不够详细,仅提供一些一般性提示:

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

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

编辑 - 根据 cmets:

This article (archived) 为您提供了实现自定义 SOAP 标头并在调用相应服务之前设置它们的完整演练。

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

【讨论】:

以下链接 2,您能否提供有关如何在 C# 中连接到它的示例代码(即创建和发送soap 标头) 见我上面的编辑 - 它包含一个完整的 walktrhough 的链接和源等。 既然Test.TestServicesClient类被初始化为WCF,而TestHeaderheader,它应该是WCF.TestHeader = header还是什么?我似乎无法初始化代理(除非我已经拥有,即 WCF)或找到此选项来设置标头。 您没有提供足够的信息...您是在使用 WCF 还是在使用一些通用的 SOAP 实现? 好的 - 请显示您的客户端类的声明,或者将 TestHeader 作为公共属性添加到 Test.TestServicesClient...

以上是关于如何将 SOAP 标头附加到我的 C# 客户端?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 HTTP 标头添加到 SOAP 客户端

如何在 WPF 应用程序中 SOAP 客户端的“Set-Cookie”标头响应的新请求中设置“Cookie”标头

如何在WPF应用程序中的SOAP客户端的“Set-Cookie”标头响应的新请求中设置“Cookie”标头

JAX-WS - 添加 SOAP 标头

SOAP 客户端错误:“获取 Http 标头时出错”

HTTP 标头或 SOAP 标头中的 WCF 肥皂操作?