【问题标题】:WCF Stream lengthWCF 流长度
【发布时间】:2009-10-06 02:16:00
【问题描述】:

我有以下代码将(文件)流发送到 wcf 客户端:

 public Stream Download( string path )
    {

        try
        {
            FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read);

            return stream;

        }
        catch (Exception ex)
        {
            string error = ex.Message;

            return null;
        }
    }

我希望能够在客户端获取发送流的长度,但是 Stream 类不支持这个。

最好的方法是什么?

谢谢, 托尼

【问题讨论】:

    标签: c# wcf


    【解决方案1】:
    [MessageContract]
    public class SizedStreamMessage
    {
       [MessageHeader]
       public long streamSize;
    
       [MessageBody] //Has to be just one MessageBody for streaming to work!
       public Stream theStream;
    }
    

    然后:

    [OperationContract]
    public SizedStreamMessage Download(string path)
    {
     //Fill in streamSize...
     //Fill in theStream...
    }
    

    显然,它仅适用于您可以在服务器端实际获取大小而无需缓冲整个流的流(FileStream 应该可以工作,因为您始终可以在不实际读取文件的情况下获取文件的长度)。

    【讨论】:

    • 所以据我了解,您只需更改通过 SOAP 消息发送的 Message 并将其添加到消息的标头中。我懂了。谢谢!我可以用这个。
    猜你喜欢
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多