WCF messageheader与messagebodymember?

我不明白何时应该放[MessageHeader]而不是[MessageBodyMember]?

我已经读过它已经习惯了像Soap这样的协议,但是,它到底有什么变化?

SOAP是一种协议,其中每个消息(请求或响应)由两部分组成: HeaderBody ,在一个Envelope中

        

您通常不会在WCF服务中使用[MessageContract](和MessageHeader或MessageBodyMember),只有当您确实需要与某些需要某种格式的数据的第三方互操作时。

我想当我想放置一些独立于消息内容的东西时,我会把它放在消息头中。 如果您希望另一方从您的邮件中读取内容,则应将其放入标题中,因为有时您可能会允许某人阅读邮件标题而不是邮件正文,因为它包含机密内容。

您可以将其视为消息数据( MessageBodyMember )和消息元数据( MessageHeader )之间的差异。 WCF提供了大量标准化头文件,用于处理寻址,安全性,可靠消息传递等。在默认的WCF实现中,它仅与SOAP相关。

还有一般规则,在复杂的消息传递体系结构中,可能存在读取元数据并将其用于某些处理和消息路由的中介(它们甚至可以添加其他元数据),但它们绝不应干扰消息体(数据)。 在安全的情况下,他们甚至无法读取消息正文或某些元数据(标题)。

对于WCF,您可以为每个邮件头和整个邮件正文设置不同的安全要求(无,签名,签名和加密)(WCF不支持不同正文部分的单独安全要求)。 这也可能导致一些关于使用正文成员或标题的决定。

例如,如果您决定进行一些自定义身份validation,或者在每条消息中传输一些客户端信息,您可能会为此创建自定义标头,但与该操作相关的实际数据负载将成为消息正文的一部分。