WCF 中 MustUnderstand 属性 的用途是什么?

What is the purpose of MustUnderstand property in WCF?

我已经阅读了一些关于 WCF 中的流式通信的示例,我注意到 MessageHeader 属性是通过 MustUnderstand 属性 设置为 true 指定的。这个属性的目的是什么?为什么这个 属性 设置为 true

The MustUnderstand attribute specifies whether the node processing the header must understand it.

假设您被要求编写一个 Web 服务,该服务需要提供允许用户使用 WCF 上传文件的单一操作(方法)。

我们首先打开 Visual Studio 并创建 WCF 服务 library.BY 默认它包含 IServiceService.cs 我们将其重命名为 IFileUploadService.cs

[ServiceContract]
public interface IFileUploadService
{
    [OperationContract]
    FileReceivedInfo Upload(FileInfo fileInfo);
 }

这里介绍了两个class

  1. 文件信息

  2. FileReceivedInfo

    这些 classes 都装饰有 MessageContract 属性。要上传文件,我选择使用流媒体。 WCF 规定保存要流式传输的数据的参数必须是方法中的唯一参数。 但是正因为如此,您不能随它一起发送任何附加信息。您可以通过使用 MessageContract Attribute 创建一个新的 class 并传入您的附加参数来解决它。

         [MessageContract]
         public class FileInfo
         {
              [MessageHeader(MustUnderstand = true)]
               public string FileName { get; set; }
    
               [MessageHeader(MustUnderstand = true)]
               public long Length { get; set; }
    
               [MessageBodyMember(Order = 1)]
               public Stream Stream { get; set; }
          }
    

通过将 MessageHeader 属性应用于 FileName 和 Length 属性,您可以将此信息放在 SOAP 消息的 header 中。流式传输文件时,SOAP 消息的 body 必须仅包含实际文件本身。通过将 MessageBodyMember 属性应用于 Stream 属性,您可以将其放置在 SOAP 消息的 body 中。

Headers 允许独立处理 body.This 允许中间应用程序确定它是否可以处理 body,提供所需的安全性,session等等等等

mustUnderstand=1 means the message receipent must process the header element

must understand=0 or missing means the header element is optional

简单地说,MustUnderstand=true 意味着; header 包含要处理的关键数据,消息的接收者(服务)必须处理 header。 如果收件人无法理解(无法处理)header 或未收到 header,则会引发错误。