如何使用C#向SOAP请求添加自定义头?

如何使用C#向SOAP请求添加自定义头?,c#,visual-studio-2010,web-services,soap,remobjects,C#,Visual Studio 2010,Web Services,Soap,Remobjects,我正在使用C#客户端连接到用Delphi编写的RemObjects SDK SOAP服务器。我可以进行初始登录,但后续请求需要一个自定义SOAP头,如下所示: <SOAP-ENV:Header SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:NS1="urn:MyAPI"> <NS1:ROClientIDHeader xsi:type="NS1:ROClientIDHe

我正在使用C#客户端连接到用Delphi编写的RemObjects SDK SOAP服务器。我可以进行初始登录,但后续请求需要一个自定义SOAP头,如下所示:

  <SOAP-ENV:Header SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:NS1="urn:MyAPI">
    <NS1:ROClientIDHeader xsi:type="NS1:ROClientIDHeader">
      <ID xsi:type="xsd:string">{3EC5A9DF-C6DC-4BFB-8134-37DDCF07910D}</ID>
    </NS1:ROClientIDHeader>
  </SOAP-ENV:Header>
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // Create a new instance of the login service
            MyLibrary.LoginServiceClient LoginClient = new MyLibrary.LoginServiceClient();

            // Call the Login method on the server
            MyLibrary.TLoginInfo LoginInfo = LoginClient.Login("Administrator", "master", 0, 0, MyLibrary.TClientType.ctWindowsClient);

            // Set the Session ID
            var SessionID = LoginInfo.SessionId;

            // Create a new instance of the Utils service
            MyLibrary.UtilsClient UtilsClient = new MyLibrary.UtilsClient();

            // Set the SOAP header //
            //  <SOAP-ENV:Header SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:NS1="urn:EasyIPv6API">
            //    <NS1:ROClientIDHeader xsi:type="NS1:ROClientIDHeader">
            //      <ID xsi:type="xsd:string">{3EC5A9DF-C6DC-4BFB-8134-37DDCF07910D}</ID>
            //    </NS1:ROClientIDHeader>
            //  </SOAP-ENV:Header>

            // Make the call
            var AddResult = UtilsClient.AddValues(1, 1);
        }
    }
}

{3EC5A9DF-C6DC-4BFB-8134-37DDCF07910D}
我现有的代码如下所示:

  <SOAP-ENV:Header SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:NS1="urn:MyAPI">
    <NS1:ROClientIDHeader xsi:type="NS1:ROClientIDHeader">
      <ID xsi:type="xsd:string">{3EC5A9DF-C6DC-4BFB-8134-37DDCF07910D}</ID>
    </NS1:ROClientIDHeader>
  </SOAP-ENV:Header>
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // Create a new instance of the login service
            MyLibrary.LoginServiceClient LoginClient = new MyLibrary.LoginServiceClient();

            // Call the Login method on the server
            MyLibrary.TLoginInfo LoginInfo = LoginClient.Login("Administrator", "master", 0, 0, MyLibrary.TClientType.ctWindowsClient);

            // Set the Session ID
            var SessionID = LoginInfo.SessionId;

            // Create a new instance of the Utils service
            MyLibrary.UtilsClient UtilsClient = new MyLibrary.UtilsClient();

            // Set the SOAP header //
            //  <SOAP-ENV:Header SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:NS1="urn:EasyIPv6API">
            //    <NS1:ROClientIDHeader xsi:type="NS1:ROClientIDHeader">
            //      <ID xsi:type="xsd:string">{3EC5A9DF-C6DC-4BFB-8134-37DDCF07910D}</ID>
            //    </NS1:ROClientIDHeader>
            //  </SOAP-ENV:Header>

            // Make the call
            var AddResult = UtilsClient.AddValues(1, 1);
        }
    }
}
使用系统数据;
使用系统图;
使用System.Linq;
使用系统文本;
使用System.Windows.Forms;
命名空间Windows窗体应用程序1
{
公共部分类主窗体:窗体
{
公共表格(
{
初始化组件();
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
//创建登录服务的新实例
MyLibrary.LoginServiceClient LoginClient=新建MyLibrary.LoginServiceClient();
//在服务器上调用Login方法
MyLibrary.TLoginInfo LoginInfo=LoginClient.Login(“管理员”、“主机”、0、0、MyLibrary.TClientType.ctWindowsClient);
//设置会话ID
var SessionID=LoginInfo.SessionID;
//创建Utils服务的新实例
MyLibrary.UtilsClient UtilsClient=新建MyLibrary.UtilsClient();
//设置SOAP头//
//  
//    
//{3EC5A9DF-C6DC-4BFB-8134-37DDCF07910D}
//    
//  
//打电话
var AddResult=UtilsClient.AddValues(1,1);
}
}
}

如何将自定义标头添加到请求中?请记住,我目前完全不了解C#。

如果后续请求需要Soap头,那么UtilsClient应该有一个像SoapHeaderValue这样的属性,您可以设置它。

在Rejects的帮助下,我们终于实现了这一点。如果有人感兴趣,他们会写一篇文章解释这是如何做到的。你可以找到它

这也是我所期望的,但这里没有类似的问题->