Это (частично основываясь на предыдущем вопросе ) звучит так, как будто проблема с пропускной способностью; Я бы серьезно подумал о том, чтобы попробовать protobuf-net; Формат «буфера протокола», разработанный Google, очень эффективен ( намного больше, чем по умолчанию DataContractSerializer
), и его очень удобно использовать из .NET. Идеально подходит для сценариев, связанных с пропускной способностью. Единственный недостаток в том, что в настоящее время перехватчики WCF не работают с Silverlight (поэтому вы не можете просто добавить запись атрибута / конфигурации), но вы можете передать данные как byte[]
достаточно легко ( просто верните byte[]
из метода).
Например; если у вас есть запись вроде:
[ProtoContract]
public class MyRecord {
[ProtoMember(1)]
public int Id {get;set;}
[ProtoMember(2)]
public string Description {get;set;}
// etc
}
и List<MyRecord>
, тогда вы сможете использовать:
byte[] result;
using(MemoryStream ms = new MemoryStream()) {
Serializer.Serialize(ms, list); // or maybe (list, ms) ;-p
result = ms.ToArray();
}
Я также видел, как кто-то возвращал Stream
в контракте операции (а не byte[]
) - что, казалось, работало лучше с MTOM (подсказка: вы определенно хотите включить MTOM, если это возможно при передаче необработанного двоичного файла ).