我不明白何时应该放[MessageHeader]而不是[MessageBodyMember]?
我有read,它曾用于符合某些协议,如Soap,但是,它最终会改变什么?
答案 0 :(得分:4)
SOAP是一种协议,其中每条消息(请求或响应)由两部分组成:标题和正文,位于信封< /强>:
<s:Envelope xmlns:s='the namespace for the soap version'>
<s:Header>
<!-- SOAP headers will come here -->
</s:Header>
<s:Body>
<!-- SOAP body members will come here -->
</s:Body>
</s:Envelope>
您通常不会在WCF服务中使用[MessageContract](和MessageHeader或MessageBodyMember),只有当您确实需要与某些需要某种格式的数据的第三方互操作时。
答案 1 :(得分:1)
我想当我想放一些与邮件内容无关的内容时,我会把它放在邮件标题中。 如果你想让另一方从你的消息中读取一些东西,它应该放在标题中,因为有时你可能会允许某人阅读邮件标题而不是邮件正文,因为它包含机密内容。
答案 2 :(得分:1)
您可以将其视为消息数据(MessageBodyMember
)和消息元数据(MessageHeader
)之间的差异。 WCF提供了大量标准化头文件,用于处理寻址,安全性,可靠消息传递等。在默认的WCF实现中,它仅与SOAP有关。
还有一般规则,在复杂的消息传递体系结构中,可能存在读取元数据并将其用于某些处理和消息路由的中介(它们甚至可以添加其他元数据),但它们绝不应干扰消息体(数据)。在安全的情况下,他们甚至无法读取消息正文或某些元数据(标题)。
对于WCF,您可以为每个邮件头和整个邮件正文设置不同的安全要求(无,签名,签名和加密)(WCF不支持不同正文部分的单独安全要求)。这也可能导致一些关于使用正文成员或标题的决定。
例如,如果您决定进行一些自定义身份验证,或者在每条消息中传输一些客户端信息,您可能会为此创建自定义标头,但与该操作相关的实际数据负载将成为消息正文的一部分。