xsd.exe - схема к классу - для использования с WCF

Я создал схему как согласованное интерфейс между нашей компанией и внешней компанией. Я теперь создаю веб-сервис WCF C# для обработки интерфейса.

Я выполнил утилиту XSD, и она создала класс C#. Схема была создана в BizTalk и ссылается на другие схемы, так в целом, существует более чем 15 сгенерированных классов.

Я поместил [DataContract} атрибут перед каждым из классов. Я должен поместить [DataMember] атрибут на каждом свойстве?
Когда я генерирую тестовую клиентскую программу, прокси не имеет никакого кода ни для одного из этих 15 классов.

Мы раньше использовали эту технику при использовании .asmx сервисов, но не уверенные, если она будет работать то же с WCF. Если бы мы изменяем схему, мы хотели бы повторно создать класс WCF, и затем мы были бы haev к каждому разу ремонтировать его с весь [DataMember] атрибуты? Существует ли более новый инструмент, подобный XSD.exe, который будет работать лучше с WCF?

Спасибо,

Neal Walters

РЕШЕНИЕ (проложенный под землей в одном из ответа/комментариев Saunders):

Добавьте XmlSerializerFormat к Интерфейсному определению:

    [OperationContract]
    [XmlSerializerFormat]     // ADD THIS LINE 
    Transaction SubmitTransaction(Transaction transactionIn);

Два примечания: 1) После того, как я сделал это, я видел, что намного больше .xsds в моем прокси (Сервисная Ссылка) тестирует клиентскую программу, но я не видел новые классы в своем intellisense. 2) По некоторым причинам, пока я не сделал сборку на проекте, я не получил все классы в intellisense (не уверенный почему).

6
задан NealWalters 8 March 2010 в 18:30
поделиться

4 ответа

Классы, использующие [DataContract] будет сериализован в очень ограниченную схему. Например, не будет атрибутов, только элементы. Это сделано намеренно и сделано для обеспечения производительности и взаимодействия.

В общем, схема того типа, с которой вы можете работать, может быть намного сложнее. Такая схема не будет использоваться с сериализатором контрактов данных. Вместо этого вам потребуется использовать сериализатор XML.

В частности, не редактируйте классы, созданные XSD.EXE. Фактически, вам следует никогда не редактируйте сгенерированный код, так как ваши правки будут удалены, как только код будет сгенерирован снова. Эти классы уже должны иметь атрибуты, которые потребуются WCF для работы с ними.

Что произойдет, если вы просто используете их как есть?

4
ответ дан 8 December 2019 в 18:35
поделиться

Нил, помимо всех вариантов, которые дал вам Джон, вам также следует проверить инструмент WCSF.blue на Codeplex: http://wscfblue.codeplex.com/

Это подход «сначала контракт» для выполнения WCF, и одним из многих вариантов, которые он предлагает, является создание файла WCF DataContract из вашего XSD:

alt text

Затем появляется диалоговое окно, в котором вы можете установить множество параметров того, как создать файл класса C # из XSD:

alt text

Довольно полезно, даже если вы хотите использовать его не более чем для преобразования XSD в классы C #, которые работают как WCF DataContracts :-)

Также см. эту запись в блоге для получения дополнительных объяснений о процессе создания XSD DataContract.

5
ответ дан 8 December 2019 в 18:35
поделиться

Я шокирован тем, что никто не указал мне на эту утилиту, о которой, как мне кажется, я и просил:

http: // msdn. microsoft.com/en-us/library/system.runtime.serialization.xsddatacontractimporter.aspx

Я еще не пробовал, но похоже, что XsdDataContractImporter был тем, что я искал, или SVCUTIL с флагом / dataContractOnly .

Я узнал об этом вчера, когда брал интервью у кандидата. Она сказала, что сериализация DataContract выполняется быстрее и ее предпочтительнее использовать.

Нил

3
ответ дан 8 December 2019 в 18:35
поделиться

Re: ваш класс XsdDataContract, упомянутый в вашем продолжении, IMO, это нишевый класс (как и ServiceContractGenerator и т. Д.), Поэтому я не удивлен, что никто не указал вам на него. Вам все равно нужно упаковать его, чтобы сделать его действительно полезным. Я почти уверен, что этот образец кода охватывает только самые простые варианты использования, поэтому я ожидаю, что придется проделать большую работу с ним, чтобы привести его в надлежащее рабочее состояние. . И, как я уже упоминал на форуме WSCF, Svcutil, wscf, xsd.exe и другие используют этот класс и связанные с ним классы в процессе генерации кода.

Что касается производительности сериализатора, в блоге Юсефа Муссауи есть действительно хорошие сообщения о различных сериализаторах и их производительности, особенно http://blogs.msdn.com/youssefm/archive/2009/07 /10/comparing-the-performance-of-net-serializers.aspx

Здесь также есть действительно хорошее обсуждение в Connect, касающееся двух сериализаторов (XS и DCS), и полезный момент, что XS по-прежнему является шагом вперед для WSDL / XSD Первая разработка как DCS предназначена только для поддержки упрощенной модели программирования и, следовательно, не поддерживает различные конструкции xml. http://connect.microsoft.com/wcf/feedback/ViewFeedback. aspx? FeedbackID = 451277

Надеюсь, это поможет, Ура, Бенджи

1
ответ дан 8 December 2019 в 18:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: