Reputation: 2498
I want to add the following class as a custom header. My client code:
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; }
}
I can see my header via Fiddler. But when I process request on service side, I can get Message Header, but properties (PropA, PropB) in the header are equal to null.
My server side code:
var obj = OperationContext.Current.IncomingMessageHeaders.GetHeader<Class1>("Class1", "Class1");
Have can deserialize my custom header correctly?
Thanks.
Upvotes: 0
Views: 563
Reputation: 929
your code looks fine so I've created sample application and it works as you want. Please check it out, maybe you have missed something in your real code...
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);
}
}
output:
Upvotes: 1