WCF分块/流媒体

12 streaming wcf uploading chunking

我正在使用WCF并希望将大文件从客户端上传到服务器.我已调查并决定遵循http://msdn.microsoft.com/en-us/library/aa717050.aspx中列出的分块方法

但是,这种方法(就像流式传输一样)将合同限制为有限的方法签名:

[OperationContract(IsOneWay=true)]
[ChunkingBehavior(ChunkingAppliesTo.InMessage)]
void UploadStream(Stream stream);
Run Code Online (Sandbox Code Playgroud)

该示例使用了相当方便的示例,即从固定路径上载文件并将其保存到服务器上的固定路径.因此,我的问题是如何传递其他参数来指定文件名,文件路径等.

例如.我想要像:

[OperationContract(IsOneWay=true)]
[ChunkingBehavior(ChunkingAppliesTo.InMessage)]
void UploadStream(Stream stream, String filePath);
Run Code Online (Sandbox Code Playgroud)

马克,先谢谢你.

Gre*_*ter 13

本文介绍如何使用MessageHeader属性强制在标头中传递内容,因此不计入参数.因此,不是传递流和其他元数据,而是创建一个具有MessageContract属性的类,并将所有元数据标记为MessageHeader.然后,将流标记为MessageBodyMember(文章不正确地称为"MessageBody").让您的UploadStream方法采用一个参数,其类型是您刚刚创建的MessageContract类的参数.我已经成功完成了这项工作,但我还没有与分块一起完成.祝好运.


Jac*_*obE 3

您可以将服务设置为会话式服务,并在合约中使用初始化方法,并将 IsInitiating 属性设置为 true。就像是:

[OperationContract(IsInitiating = true)]
void InitializeUploadService(string filename);

[OperationContract(IsOneWay = true, IsInitiating = false)]
[ChunkingBehavior(ChunkingAppliesTo.InMessage)]
void UploadStream(Stream stream);
Run Code Online (Sandbox Code Playgroud)

我从未尝试过使用流服务,但它基本上应该使 WCF 强制执行 InitializeUploadService 始终在 UploadStream 之前调用。

更多文档可以在这里找到: http://msdn.microsoft.com/en-us/library/system.servicemodel.description.operationdescription.isinitiating.aspx