我想将以下类添加为自定义标头。我的客户代码:
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; }
}
我可以通过Fiddler看到我的标题。但是当我在服务端处理请求时,我可以获得消息头,但是头中的属性(PropA,PropB)等于null。
我的服务器端代码:
var obj = OperationContext.Current.IncomingMessageHeaders.GetHeader<Class1>("Class1", "Class1");
是否可以正确反序列化我的自定义标题?
感谢。
答案 0 :(得分:1)
你的代码看起来很好所以我已经创建了示例应用程序,它可以按你的需要工作。请检查一下,也许你错过了真实代码......
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);
}
}
输出: