我正在玩protobuf-net和WCF.这是我创建的代码: public class MobileServiceV2{ [WebGet(UriTemplate = "/some-data")] [Description("returns test data")] public Stream GetSomeData() { WebOperationContext.Current.OutgoingResponse.Cont
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;
但是,这确实意味着它在内存中缓冲.我可以试着想出一些伏都教来避免这种情况,但这会非常复杂.