我也在这里寻找其他一些主题,但我还没有找到解决问题的方法。
想象一下:
我有一个非常简单ServiceContract
,OperationContracts
不同。其中一个OperationContracts
是一个简单的用例“下载数据传输对象”。
服务看起来像:
...
[OperationContract]
DTO Download(strind Id)
...
DTO类看起来像:
[DataContract]
public class DTO
{
[DataMember]
public string Id;
[DataMember]
public byte[] Data;
}
当然它非常简单并且工作正常,但我需要自己在DTO中分配byte[]
!
我的代码是框架组件的一部分,它在大量内存限制下并行工作。我不希望WCF分配所有byte [],我不希望ManagedHeap再次释放它们。我需要共享和重用所有并行的现有缓冲区。
因此,当我完成序列化后,我将在服务器端重用缓冲区。 在客户端,我希望WCF读入我的缓冲区!
我尝试了一些拥有XmlObjectSerialiers
和拥有OperationBehaviors
的解决方案,但它还没有用。
有没有人有其他想法?
答案 0 :(得分:0)
更新:
我找到了第一个使用自己的Serializer的工作解决方案:XmlObjectSerializer,一个自己的IContractBehavior和一个自己的DataContractSerializerOperationBehavior。
在反序列化期间从XmlDictionaryReader读取时,我使用以下代码段:
public bool DeserializeFrom(XmlDictionaryReader source)
{
...
readBytes = source.ReadElementContentAsBase64(MyOwnAlreadyAllocatedBuffer, offset, toRead);
...
}
这可行,但它仍然比DataContractSerializer慢一点。
还有其他选择吗?
注意:我只想传输已经二进制的序列化数据!