[Mono-bugs] [Bug 598223] New: Custom MessageHeaders not being sent

bugzilla_noreply at novell.com bugzilla_noreply at novell.com
Tue Apr 20 14:15:40 EDT 2010


http://bugzilla.novell.com/show_bug.cgi?id=598223

http://bugzilla.novell.com/show_bug.cgi?id=598223#c0


           Summary: Custom MessageHeaders not being sent
    Classification: Mono
           Product: Mono: Class Libraries
           Version: 2.6.x
          Platform: x86
        OS/Version: All
            Status: NEW
          Severity: Major
          Priority: P5 - None
         Component: WCF
        AssignedTo: mono-bugs at lists.ximian.com
        ReportedBy: richard at ayudasystems.com
         QAContact: mono-bugs at lists.ximian.com
          Found By: Third Party Developer/Partner
           Blocker: Yes


Description of Problem:

Custom headers attached to WCF messages are not sent when running in Mono 2.6
on both Windows and Linux.

Steps to reproduce the problem:
1. 

Create a simple WCF service exposing a single method. The parameter should be
an object with the MessageContract attribute, and contain a header. Example:

[ServiceContract]
public interface IRegularService
{
    [OperationContract]
    void GetData(TestRequestMessage obj);
}

[MessageContract]
public class TestRequestMessage
{
    [MessageHeader]
    public string Header { get; set; }

    [MessageBodyMember]
    public string Body { get; set; }
}

public class RegularService : IRegularService
{
    #region IRegularService Members

    public void GetData(TestRequestMessage obj)
    {
       if (obj.Header == null)
           throw new Exception("Header is null");
       else
           System.Diagnostics.Debug.WriteLine(string.Format("Header: {0}",
obj.Header));

       if (obj.Body == null)
           throw new Exception("Body is null");
       else
           System.Diagnostics.Debug.WriteLine(string.Format("Body: {0}",
obj.Body));
        }

        #endregion
    }

2. 

Host the service and then attempt to call it from a Mono client:

.. client code:

BasicHttpBinding binding = new BasicHttpBinding();
ServiceEndpoint svcEp = new
ServiceEndpoint(ContractDescription.GetContract(typeof(IRegularService)),
                        binding, new
EndpointAddress("http://serviceaddress/service.svc"));

ChannelFactory<IRegularService> cnlFactory = new
ChannelFactory<IRegularService>(svcEp);

IRegularService svc = cnlFactory.CreateChannel();

TestRequestMessage msg = new TestRequestMessage()
{
    Header = "header",
    Body = "body"
};

srv.GetData(msg);

Actual Results:

The custom header is not passed to the service. Break into the service and the
'Header' property will be null.

Expected Results:

The custom header should be passed to the service as part of the message.

How often does this happen? 

Every time.

Additional Information:

As well as using the MessageContract / MessageHeader attributes, I also tried
to attach a header to the message manually, e.g.

using(OperationContextScope scope = new
OperationContextScope((IContextChannel)srv))
{
    MessageHeader<string> mhg = new MessageHeader<string>("header");
    MessageHeader untyped = mhg.GetUntypedHeader("token", "ns");
    OperationContext.Current.OutgoingMessageHeaders.Add(untyped);

..

And then read it back on the service like this:

string token =
OperationContext.Current.IncomingMessageHeaders.GetHeader<string>("token",
"ns");

..

The result was the same.

I also implemented IClientMessageInspector on the client, and attached it to
the endpoint using an IEndpointBehavior implementation. In my
IClientMessageInspector implementation, I used the BeforeSendRequest method to
attach my custom header to the message and then check it was added succesfully.
My header appears in the message, however it does not get sent to the server
(it is null on the server).

-- 
Configure bugmail: http://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.


More information about the mono-bugs mailing list