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

标签 c# .net wcf streaming

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

最佳答案

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

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

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

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

这里介绍了两个类

  1. 文件信息

  2. 文件接收信息

    这些类都装饰有 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/

相关文章:

c# - WCF 服务可以替代 TCPListener 的功能吗?

WCF + CQRS + 推送通知

c# - 将异步与 .Net 4 和 ms.bcl.async 一起使用

c# - 如何在 Entity Framework 中使用分部类的非数据库属性进行关联

c# - 如何将服务总线消息 SystemProperties.LockToken 反序列化到自己的类 C# 中?

c# - Linq 分页 - 如何解决性能问题?

c# - 两个 C# 扩展泛型方法之间的调用不明确,其中 T :class and other where T:struct

c# - WF4 : How do I evaluate an expression only known at runtime?

c# - 如何监控/嗅探本地 DNS 查找到 Windows 本地 DNS? (在 XP、Vista、Win7 上)

java - 使用 SSL 的 Metro Web 服务 - 这是一个安全的对话吗