Развертывание службы Silverlight WCF на сервере IIS приводит к ошибке «Подумайте о маркировке с помощью DataContractAttribute» - PullRequest
1 голос
/ 26 октября 2009

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

Тип 'MyProject.Web.MyClass' нельзя сериализованная. Попробуйте пометить его атрибут DataContractAttribute, и отмечая всех его членов, вы хочу сериализовать с Атрибут DataMemberAttribute.

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

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

Ответы [ 2 ]

1 голос
/ 27 октября 2009

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

В отличие от сериализатора Xml, DataContractSerializer в WCF использует модель "opt-in" - только те вещи, которые вы явно * помечаете как [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] (для каждого члена, который будет отправлен внутри этого класса).

Марк

1 голос
/ 26 октября 2009

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

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

...