单声道WCF中的自定义消息头

时间:2010-04-19 20:57:13

标签: wcf mono header message

我正在通过在Ubuntu(Mono 2.6)上运行的Mono客户端进行WCF调用。

我似乎无法在邮件中添加自定义标头。我尝试了两种不同的方式:

  • 在自定义类
  • 上使用[MessageContract]和[MessageHeader]属性
  • 以编程方式将标题添加到外发邮件中,例如

    MessageHeader mhg = new MessageHeader(“test”);
    MessageHeader untyped = mhg.GetUntypedHeader(“token”,“ns”);
    OperationContext.Current.OutgoingMessageHeaders.Add(无类型);

当呼叫到达服务器时,标头不存在!它总是空的。

请注意,这两种方法在Windows中的.NET上运行良好。另请注意,消息正文在Mono上完全正常。

我在网上看到一些建议应该工作的参考:

http://forums.monotouch.net/yaf_postsm1692.aspx
https://bugzilla.novell.com/show_bug.cgi?id=551745

此外 - Mono状态页面显示所有MessageHeader内容已完全实现......

有人幸运吗?

先谢谢理查德

1 个答案:

答案 0 :(得分:1)

我正在努力解决类似的问题。

我用C#客户端和服务器解决了这个问题。假设你的客户端正确,我的经验可能有所帮助:

我的服务方法如下:

public FileUploadResult UploadFileSegment(FileUploadMessage uploadMessage)

我的服务方法参数类如下所示:

 [MessageContract]
  public class FileUploadMessage
  {
    [MessageHeader(MustUnderstand = false, Name="Metadata", Namespace = "")]
    public FileUploadMetadata Metadata;

    [MessageBodyMember(Order = 1)]
    public Stream FileByteStream { get; set; }
  }

请注意属性中的Name =和Namespace =赋值。

当我在客户端注入消息头时,我还指定了名称和命名空间。在C#中它看起来像这样:

using (OperationContextScope contextScope = new OperationContextScope(proxy.InnerChannel))
  {
    OperationContext.Current.OutgoingMessageHeaders.Add(MessageHeader.CreateHeader("Metadata", "", uploadHeader));
    proxy.UploadFileSegmentAsync(uploadMessage);
  }

结果是我在客户端提供的命名自定义头被映射到方法参数实例上的类似命名(via属性)属性。