WCF中MustUnderstand属性的目的是什么?

时间:2015-03-11 07:59:35

标签: c# .net wcf streaming

我已经阅读了一些有关WCF中流式传输的示例,我注意到MessageHeader属性是在MustUnderstand属性设置为true的情况下指定的。这家酒店的目的是什么?为什么此属性设置为true

2 个答案:

答案 0 :(得分:4)

  

MustUnderstand属性指定处理标头的节点是否必须理解它。

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

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

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

这里介绍了两个类

  1. 档案信息

  2. 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; }
          }
    
  3. 通过将MessageHeader属性应用于FileName和Length属性,可以将此信息放在SOAP消息的标头中。流式传输文件时,SOAP消息的主体必须只包含实际文件本身。通过将MessageBodyMember属性应用于Stream属性,可以将其放在SOAP消息的正文中。

    允许独立于正文处理标题。这允许中间应用程序确定它是否可以处理正文,提供所需的安全性,会话等等。

      

    mustUnderstand = 1表示消息receipent必须处理   标题元素

         

    必须理解= 0或缺少表示标题元素是可选的

答案 1 :(得分:1)

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