Какие типы данных C # не сериализуемы в WCF? - PullRequest
3 голосов
/ 04 августа 2010

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

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

Спасибо.

Ответы [ 3 ]

1 голос
/ 04 августа 2010

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

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

1 голос
/ 04 августа 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...