C# WCF将对象添加为自定义标头
我想添加以下类作为自定义头。我的客户代码:C# WCF将对象添加为自定义标头,c#,wcf,C#,Wcf,我想添加以下类作为自定义头。我的客户代码: var obj = new Class1 { PropA = "A", PropB = "B" }; var header = AddressHeader.CreateAddressHeader("Class1", "Class1", obj); var binding = new BasicHttpBinding(); var address = new EndpointAddress(new Uri(urlString), header); C
var obj = new Class1 { PropA = "A", PropB = "B" };
var header = AddressHeader.CreateAddressHeader("Class1", "Class1", obj);
var binding = new BasicHttpBinding();
var address = new EndpointAddress(new Uri(urlString), header);
ChannelFactory<TChannel>.CreateChannel(binding, address);
[DataContract]
public class Class1
{
[DataMember]
public string PropA { get; set; }
[DataMember]
public string PropB { get; set; }
}
var obj=newclass1{PropA=“A”,PropB=“B”};
var header=AddressHeader.CreateAddressHeader(“Class1”、“Class1”、obj);
var binding=新的BasicHttpBinding();
var address=新端点地址(新Uri(urlString),头);
CreateChannel(绑定,地址);
[数据合同]
公共班级1
{
[数据成员]
公共字符串PropA{get;set;}
[数据成员]
公共字符串PropB{get;set;}
}
我可以通过Fiddler看到我的标题。但当我在服务端处理请求时,我可以得到消息头,但头中的属性(PropA,PropB)等于null
我的服务器端代码:
var obj = OperationContext.Current.IncomingMessageHeaders.GetHeader<Class1>("Class1", "Class1");
var obj=OperationContext.Current.IncomingMessageHeaders.GetHeader(“Class1”、“Class1”);
是否可以正确反序列化我的自定义标头
谢谢。您的代码看起来很好,所以我创建了示例应用程序,它可以按照您的需要工作。请检查一下,也许你在真正的代码中遗漏了什么
class Program
{
static void Main(string[] args)
{
string urlString = "http://localhost:8081/test";
using (var host = new ServiceHost(typeof(Service), new Uri(urlString)))
{
host.AddDefaultEndpoints();
host.Open();
var obj = new Class1 { PropA = "A", PropB = "B" };
var header = AddressHeader.CreateAddressHeader("Class1", "Class1", obj);
var binding = new BasicHttpBinding();
var address = new EndpointAddress(new Uri(urlString), header);
var channel = ChannelFactory<IService>.CreateChannel(binding, address);
channel.DoWork();
Console.ReadLine();
}
}
}
[DataContract]
class Class1
{
[DataMember]
public string PropA { get; set; }
[DataMember]
public string PropB { get; set; }
}
[ServiceContract]
interface IService
{
[OperationContract]
void DoWork();
}
class Service : IService
{
public void DoWork()
{
var obj = OperationContext.Current.IncomingMessageHeaders.GetHeader<Class1>("Class1", "Class1");
Console.WriteLine("PropA: " + obj.PropA);
Console.WriteLine("PropB: " + obj.PropB);
}
}
类程序
{
静态void Main(字符串[]参数)
{
字符串URL字符串=”http://localhost:8081/test";
使用(var-host=new-ServiceHost(typeof(Service),new-Uri(urlString)))
{
AddDefaultEndpoints();
host.Open();
var obj=newclass1{PropA=“A”,PropB=“B”};
var header=AddressHeader.CreateAddressHeader(“Class1”、“Class1”、obj);
var binding=新的BasicHttpBinding();
var address=新端点地址(新Uri(urlString),头);
var channel=ChannelFactory.CreateChannel(绑定,地址);
道工();
Console.ReadLine();
}
}
}
[数据合同]
一班
{
[数据成员]
公共字符串PropA{get;set;}
[数据成员]
公共字符串PropB{get;set;}
}
[服务合同]
接口设备
{
[经营合同]
无效销钉();
}
班级服务:IService
{
公共工作
{
var obj=OperationContext.Current.IncomingMessageHeaders.GetHeader(“Class1”、“Class1”);
控制台写入线(“PropA:+obj.PropA”);
控制台写入线(“PropB:+obj.PropB”);
}
}
输出:
我正在使用控制台应用程序进行托管。也许,这就是问题所在。我将用不同的标题发送我的所有属性。谢谢