我已经阅读了一些关于 WCF 中的流式通信的示例,我注意到 MessageHeader
属性是用 MustUnderstand
指定的属性设置为 true
。这个属性的目的是什么?为什么此属性设置为 true
?
最佳答案
The MustUnderstand attribute specifies whether the node processing the header must understand it.
假设您被要求编写一个 Web 服务,该服务需要提供允许用户使用 WCF 上传文件的单一操作(方法)。
我们首先打开 Visual Studio 并创建 WCF 服务库。默认情况下它包含 IService
和 Service.cs
我们将其重命名为 IFileUploadService.cs
[ServiceContract]
public interface IFileUploadService
{
[OperationContract]
FileReceivedInfo Upload(FileInfo fileInfo);
}
这里介绍了两个类
文件信息
文件接收信息
这些类都装饰有 MessageContract 属性。要上传文件,我选择使用流媒体。 WCF 规定保存要流式传输的数据的参数必须是方法中的唯一参数。 但是正因为如此,您不能随它一起发送任何附加信息。您可以通过使用
MessageContract Attribute
创建一个新类并传入您的附加参数来解决它。[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 消息的主体必须仅包含实际文件本身。通过将 MessageBodyMember 属性应用于 Stream 属性,您可以将其放置在 SOAP 消息的正文中。
header 可以独立于主体进行处理。这允许中间应用程序确定它是否可以处理主体,提供所需的安全性、 session 等。
mustUnderstand=1 means the message receipent must process the header element
must understand=0 or missing means the header element is optional
关于c# - WCF 中 MustUnderstand 属性的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28981246/