如何控制通用WCF消息协定的名称

时间:2010-10-18 17:26:59

标签: .net wcf

我正在使用消息合约模型生成WCF服务。

我创建了一个通用的请求消息合同,如下所示:

[MessageContract]
public Request<T>
{
    [MessageBodyMember]
    public T Details { get; set; }
}

我习惯使用[DataContract(Name="Contract{0}")]为通用数据合同生成可读名称,但这种方法似乎对我使用消息契约不起作用。

有没有办法使用消息合约模型实现相同的行为?

2 个答案:

答案 0 :(得分:4)

对于您想要完成的工作似乎有很多工作,但我相信您可以创建一个MessageInspector,它允许您直接与XML交互。

客户端消息检查器实现IClientMessageInspector接口,服务消息检查器实现IDispatchMessageInspector接口。

http://msdn.microsoft.com/en-us/library/aa717047.aspx

任何服务(调度程序)消息检查员都必须实施两个IDispatchMessageInspector方法AfterReceiveRequestBeforeSendReply

链接更详细,但是一旦实现了这些链接,您应该能够将检查器添加到web.config中,并且应该全部设置。

答案 1 :(得分:2)

WrapperName属性上有一个WrapperNamespaceMessageContract属性,我认为它也是一样的。如,

[MessageContract(WrapperName = "FooMessage", IsWrapped = true)]
public class Request<T>
{ ... }

注意添加IsWrapped属性以指示消息应序列化到包装元素中。