enz*_*m83 1 .net c# streaming wcf
我已经阅读了一些关于 WCF 中的流通信的示例,我注意到MessageHeader属性是使用MustUnderstand设置为true. 这个属性的目的是什么?为什么将此属性设置为true?
MustUnderstand 属性指定处理标头的节点是否必须理解它。
假设您被要求编写一个 Web 服务,该服务需要提供允许用户使用 WCF 上传文件的单个操作(方法)。
我们首先打开 Visual Studio 并创建 WCF 服务库。默认情况下它包含IService,Service.cs我们将其重命名为IFileUploadService.cs
[ServiceContract]
public interface IFileUploadService
{
[OperationContract]
FileReceivedInfo Upload(FileInfo fileInfo);
}
Run Code Online (Sandbox Code Playgroud)
这里介绍了两个类
文件信息
文件接收信息
这些类都用 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; }
}
Run Code Online (Sandbox Code Playgroud)
通过将 MessageHeader 属性应用于 FileName 和 Length 属性,您可以将此信息放在 SOAP 消息的标头中。流式传输文件时,SOAP 消息的正文必须仅包含实际文件本身。通过将 MessageBodyMember 属性应用到 Stream 属性,您可以将它放在 SOAP 消息的正文中。
允许独立于正文处理标头。这允许中间应用程序确定它是否可以处理正文,提供所需的安全性、会话等。
mustUnderstand=1 表示消息接收者必须处理头元素
必须理解 = 0 或缺失意味着标题元素是可选的
| 归档时间: |
|
| 查看次数: |
2761 次 |
| 最近记录: |