2010-08-04 2 views
3

У нас есть классы сущностей C#, которые сопоставляются с некоторыми из наших таблиц базы данных SQL Server. Нам нужно иметь возможность сериализовать эти классы, чтобы отправить их обратно клиенту, с сервера, через WCF. Для каждого типа данных SQL Server у нас есть соответствующий тип данных C# CLR в связанном объекте.Какие типы данных C# не являются сериализуемыми WCF?

У нас есть некоторые типы данных SQL Server, такие как Image и VarBinary, которые нам нужно сопоставить с типом данных C# CLR, поэтому мы можем передать данные обратно клиенту. Проблема в том, что я не знаю, какой тип данных CLR использовать для этих типов изображений и VarBinary SQL, чтобы мы могли сериализовать их через WCF.

Спасибо.

ответ

1

Если вы не используете двоичный транспорт, я ожидаю, что WCF является очень плохим выбором для отправки двоичного файла, потому как SOAP и JSON ужасны при обращении с ним. Например, вы можете передать массив byte [], но это будет чрезвычайно многословным (особенно в SOAP).

Возможно, лучше просто BASE64 данные в строку и отправить это.

+0

Интересная идея. У вас есть пример этого, в обоих направлениях? –

1

Я думаю, что ссылки, которые Митч включил в свой ответ, определенно помогают. Другая вещь, которая поможет вам определить, какие типы CLR использовать, будет ли тип привязки, который вы собираетесь использовать? Если вы используете привязки NetXXX (например, NetTcpBinding), вы предполагаете, что клиент будет .NET-клиентом, и для этого оптимизируется кодировка сообщений. Возможно, вам лучше использовать байтовый массив для этих типов вместо строки base64. Если вы идете на интероперабельность (и используя WebHttpBinding или WSHttpBinding или какую-либо другую совместимую привязку), то, возможно, строка base64 - лучший способ пойти (как предложил Кирк). Он не будет оптимизирован для скорости/размера, но вы не зависите от того, что .NET находится на клиенте.

Надеюсь, это поможет!

Смежные вопросы