Добавление справки службы WCF не создает код - PullRequest
6 голосов
/ 26 июля 2010

Сценарий :

  • Веб-сайт проекта под .NET 3.5
  • Visual Studio 2010
  • Сервисная справка WCF

Задача :
Я пытаюсь расширить класс, помеченный атрибутом DataContract. Хотя сгенерированный класс был объявлен partial, я мог легко его расширить. Я попытался объявить частичный класс в том же пространстве имен с тем же именем, но, похоже, он не распознает, какой класс он расширяет. Я попытался найти файл сгенерированного кода (Reference.cs), который, как мне показалось, существовал после прочтения этой статьи внутри справочной папки, но его там не было. При попытке перейти к определению класса я обнаружил, что он находится в скомпилированной библиотеке, и самая большая проблема заключается в том, что он не был объявлен как частичный.
Вопрос :
Связано ли это различие с тем, что я использую веб-сайт, а не веб-проект? Если так, есть ли способ, которым я мог бы сделать генератор кода (который также, кажется, компилирует сгенерированный код), чтобы объявить класс как частичный?

Ответы [ 2 ]

3 голосов
/ 26 июля 2010

Да, есть способ объявить свои классы DataContract как частичные.

Для этого вы хотите использовать шаблон DTO . По сути, это означает определение «общих» классов в другой сборке, а также наличие службы и приложения, которое использует службу, которые ссылаются на сборку с вашими общими классами.

Так, например, ваша сборка "DTO" может содержать DTO под названием "Product". Итак, вы делаете их частичными, а затем украшаете Product и любой другой класс с атрибутами WCF, такими как DataContract, DataMember и т. Д.

Теперь вы ссылаетесь на сборку DTO с вашим сервисным проектом и вашим веб-проектом.

Теперь, когда вы зайдете в свой веб-проект и нажмете «Добавить ссылку на службу», нажмите «Дополнительно», и вы заметите, что можете включить опцию «повторно использовать ссылочные сборки». сделайте это, и вы получите полный контроль над вашими DataContracts.

0 голосов
/ 26 июля 2010

Пустые клиентские ссылочные прокси-классы действительно могут быть самой неприятной проблемой для решения.

Я бы порекомендовал вам использовать WCF Test Client или командную строку svcutil.exe. против службы - вы часто можете получить очень многоболее подробное описание ошибок с помощью этих инструментов, чем с помощью мастера ссылок на службы Visual Studio.

В моем случае проблемы неизменно связаны с проблемами сериализации или пространства имен для объекта / графа - обычно они не совпадают get и set вDataMember свойства, отсутствующие KnownType на полиморфных объектах или циклические ссылки в графе.

Частичное не должно быть проблемой.Просто убедитесь, что любые дополнительные свойства, которые вы хотите сериализовать, помечены как DataMember.

Если все остальное не удалось, рекомендуется запустить модульный тест сериализации / десериализации для вашего графа сущностей / сущностей.

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