如何控制一般wcf消息契约的名称?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)

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

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

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

我习惯于使用[DataContract(Name="Contract{0}")]通用数据协定来产生可读的名字,但这种方法似乎并不适用于我使用消息协定。

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

提问于
用户回答回答于

有一个WrapperNameWrapperNamespace对房地产MessageContract,我认为做同样的事情属性。例如,

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

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

用户回答回答于

对于想要完成的任务看起来很多工作,但我相信可以创建一个MessageInspector,它将允许直接与XML进行交互。

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

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

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

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

扫码关注云+社区