我已经阅读了一些有关WCF中流式传输的示例,我注意到MessageHeader
属性是在MustUnderstand
属性设置为true
的情况下指定的。这家酒店的目的是什么?为什么此属性设置为true
?
答案 0 :(得分:4)
MustUnderstand属性指定处理标头的节点是否必须理解它。
想象一下,您被要求编写一个Web服务,该服务需要提供允许用户使用WCF上传文件的单个操作(方法)。
我们首先打开Visual Studio并创建WCF服务库.BY默认包含IService
和Service.cs
我们将其重命名为IFileUploadService.cs
[ServiceContract]
public interface IFileUploadService
{
[OperationContract]
FileReceivedInfo Upload(FileInfo fileInfo);
}
这里介绍了两个类
档案信息
FileReceivedInfo
这些类都使用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消息的标头中。流式传输文件时,SOAP消息的主体必须只包含实际文件本身。通过将MessageBodyMember属性应用于Stream属性,可以将其放在SOAP消息的正文中。
允许独立于正文处理标题。这允许中间应用程序确定它是否可以处理正文,提供所需的安全性,会话等等。
mustUnderstand = 1表示消息receipent必须处理 标题元素
必须理解= 0或缺少表示标题元素是可选的
答案 1 :(得分:1)
简单地说,MustUnderstand = true意味着; 标头包含要处理的关键数据,并且消息的接收者(服务)必须处理标头。 如果收件人,无法理解(无法处理)标题或未收到标题,则会引发错误。