При развертывании службы Silverlight WCF на сервере IIS возникает ошибка «Рассмотрите возможность маркировки с помощью DataContractAttribute».

StackOverflow https://stackoverflow.com/questions/1626242

Вопрос

У меня есть приложение Silverlight со службой WCF с поддержкой Silverlight.Служба передает небольшой класс POCO с несколькими строковыми свойствами и List<> перечисления, определенного в классе.Все работает нормально при использовании сервера разработки ASP.NET, но когда я перемещаю службу на сервер IIS (Windows 2003), я получаю следующую ошибку при попытке просмотреть файл .svc:

Тип 'myproject.web.myclass' не может быть сериализован.Рассмотрим маркировку его атрибутом DataContractattribute и отмечайте всех его членов, которые вы хотите сериализовать с помощью атрибута DataMemberAttribute.

Несмотря на то, что это рабочая часть разработки, я попробовал добавить украшения...но пока без эффекта.

Есть идеи относительно того, что может быть причиной такой разницы в результатах между рабочей станцией разработки и сервером?

Это было полезно?

Решение

Убедитесь, что (1) .NET Framework 3.5 SP1 установлен на сервере и (2) веб-сайт работает в режиме ASP.Net 2.0, а не в режиме 1.1.

Установщик веб-платформы - это простой способ установки обновленной платформы если он еще не установлен.

Другие советы

Ваши элементы данных (классы POCO) должны быть помечены как DataContracts для WCF, чтобы WCF явно знал, что ему нужно сериализовать для отправки по сети.

В отличие от сериализатора Xml, DataContractSerializer в WCF использует модель «согласия» — только те вещи, которые вы явно отметить как [DataContract] и [DataMember] будет сериализован — все остальное будет игнорироваться.

[DataContract]
class YourPocoClass
{
   [DataMember]
   private int _ID;

   [DataMember]
   string CustomerName { get; set; } 

   public decimal CustomerOrderAmount { get; set; } 
}

В этом примере из YourPocoClass, у вас будут оба _ID поле и CustomerName свойство быть сериализовано в сообщение WCF, но CustomerOrderAmount воля нет быть сериализованным - public или нет.

Итак, лучшая практика:явно отметьте все сложные типы, которые вам нужно отправить в WCF, с помощью [DataContract] (для класса) и [DataMember] (для каждого члена, который будет отправлен внутри этого класса).

Марк

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top