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 默认它包含 IService
和 Service.cs
我们将其重命名为 IFileUploadService.cs
[ServiceContract]
public interface IFileUploadService
{
[OperationContract]
FileReceivedInfo Upload(FileInfo fileInfo);
}
这里介绍了两个class
文件信息
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,则会引发错误。
我已经阅读了一些关于 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 默认它包含 IService
和 Service.cs
我们将其重命名为 IFileUploadService.cs
[ServiceContract]
public interface IFileUploadService
{
[OperationContract]
FileReceivedInfo Upload(FileInfo fileInfo);
}
这里介绍了两个class
文件信息
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,则会引发错误。