C# 如何订购SOAP请求头?
当我注入服务时,我添加一个CustomEndpointBehavior来添加MessageInspector来添加成功请求所需的头 问题是,我调用的WCF服务期望在第一个标头处有一个特定的标头,.NET默认XML序列化程序在第二个标头处序列化,因为他的名字(我认为这就是问题所在)C# 如何订购SOAP请求头?,c#,wcf,soap,dependency-injection,.net-core,C#,Wcf,Soap,Dependency Injection,.net Core,当我注入服务时,我添加一个CustomEndpointBehavior来添加MessageInspector来添加成功请求所需的头 问题是,我调用的WCF服务期望在第一个标头处有一个特定的标头,.NET默认XML序列化程序在第二个标头处序列化,因为他的名字(我认为这就是问题所在) 如何设置标题的顺序?如果这是serializator的事情,我如何定制序列化的顺序呢?据我所知,第一个soap头总是操作头,它指示要调用的操作契约的名称。后续的自定义消息头将根据我们添加自定义消息头的顺序进行排序 va
如何设置标题的顺序?如果这是serializator的事情,我如何定制序列化的顺序呢?据我所知,第一个soap头总是
操作
头,它指示要调用的操作契约的名称。后续的自定义消息头将根据我们添加自定义消息头的顺序进行排序
var header1 = MessageHeader.CreateHeader("header1", "", "header1value");
var header2 = MessageHeader.CreateHeader("header2", "", "header2value");
request.Headers.Add(header2);
request.Headers.Add(header1);
结果。因此,恐怕无法在操作消息头之前对这些soap消息头进行排序。
此外,数据契约的成员能够使用“order”属性按固定顺序进行排序
[DataContract]
public class Product
{
[DataMember(Order = 3)]
public int ID { get; set; }
[DataMember(Order = 5)]
public string Name { get; set; }
}
如果有什么我可以帮忙的,请随时告诉我。您不应该期望发送的参数有任何顺序,尤其是请求头。它们通常以无序的方式读取,其中字典(或匿名对象)被分配键值,参数以任意顺序计算。顺便说一句,如果不向HttpClient或其他更低级(更接近金属)的东西发出自己的请求,就无法指定头参数的顺序。我认为这是在注入服务时,我设置了自定义端点行为来对头进行排序,但在服务层调用此服务时,这些头并不像我所说的那样被排序,我认为是关于在.NET内核中注入服务时如何序列化的问题
[DataContract]
public class Product
{
[DataMember(Order = 3)]
public int ID { get; set; }
[DataMember(Order = 5)]
public string Name { get; set; }
}