3

我也在这里寻找其他一些主题,但我还没有找到解决我的问题的方法。

想象一下:
我有一个非常简单ServiceContract的不同OperationContracts. 其中之一OperationContracts是一个简单的用例“下载数据传输对象”。

服务看起来像:

...
[OperationContract]
DTO Download(strind Id)
...

DTO 类看起来像:

[DataContract]
public class DTO
{
     [DataMember]
     public string Id;

     [DataMember]
     public byte[] Data;
}

当然它很简单而且效果很好,但是我需要byte[]自己在DTO中分配!

我的代码是框架组件的一部分,它在大量内存限制下并行工作。我不希望 WCF 分配所有 byte[] 并且我不希望 ManagedHeap 再次释放它们。我需要共享和重用所有并行的现有缓冲区。

因此,当我完成序列化时,我将重用服务器端的缓冲区。在客户端,我希望 WCF 读入我的缓冲区

我尝试了一些使用 ownXmlObjectSerialiers和 own 的解决方案OperationBehaviors,但它还没有奏效。

有没有人有任何其他想法?

4

1 回答 1

0

更新:

我找到了第一个使用自己的 Serializer:XmlObjectSerializer、自己的 IContractBehavior 和自己的 DataContractSerializerOperationBehavior 的工作解决方案。

在反序列化期间从 XmlDictionaryReader 读取时,我使用以下代码段:

public bool DeserializeFrom(XmlDictionaryReader source)
{
     ...
     readBytes = source.ReadElementContentAsBase64(MyOwnAlreadyAllocatedBuffer, offset, toRead);
     ...
}

这可行,但它仍然比 DataContractSerializer 慢一点。

还有其他选择吗?

注意:我只想传输已经二进制序列化的数据!

于 2012-10-31T14:35:49.420 回答