当前位置 : 主页 > 大数据 > 区块链 >

.net – 如何从WCF服务返回流?

来源:互联网 收集:自由互联 发布时间:2021-06-22
我正在玩protobuf-net和WCF.这是我创建的代码: public class MobileServiceV2{ [WebGet(UriTemplate = "/some-data")] [Description("returns test data")] public Stream GetSomeData() { WebOperationContext.Current.OutgoingResponse.Cont
我正在玩protobuf-net和WCF.这是我创建的代码:

public class MobileServiceV2
{
    [WebGet(UriTemplate = "/some-data")]
    [Description("returns test data")]
    public Stream GetSomeData()
    {
        WebOperationContext.Current.OutgoingResponse.ContentType = "application/x-protobuf";

        var ms = new MemoryStream();
        ProtoBuf.Serializer.Serialize(ms, new MyResponse { SomeData = "Test data here" });
        return ms;
    }
}

[DataContract]
public class MyResponse
{
    [DataMember(Order = 1)] 
    public string SomeData { get; set; }
}

当我看到Fiddler时 – 我可以看到正确的传出内容类型,并且看起来都很好,但我得到了空洞的回复. IE提示下载文件,此文件为空.序列化器无法正常工作吗?或者我只是不做对吗?

编辑:

我在方法中添加了以下代码,是的,它正确序列化.我如何从WCF返回流有什么问题..

using (var file = File.Create("C:\\test.bin"))
        {
            Serializer.Serialize(file, new MyResponse { SomeData = "Test data here" });
        }
只需写入MemoryStream,然后回退即可.在这种情况下不要Dispose()它:

var ms = new MemoryStream();
Serializer.Serialize(ms, obj);
ms.Position = 0;
return ms;

但是,这确实意味着它在内存中缓冲.我可以试着想出一些伏都教来避免这种情况,但这会非常复杂.

网友评论