Есть ли способ взломать Reference.svcmap для получения конкретного эквивалента svcutil? - PullRequest
1 голос
/ 13 июля 2010

У меня есть пара проблем с правильным генерированием кода из поставляемого набора WSDL и XSD вне моего контроля.Чтобы получить правильный прокси-класс, который работает с пользовательским FaultException, у меня есть следующие параметры svcutil:

svcutil /t:code /out:InvoiceService_v1.cs /n:*,Test.Invoice_v1 /UseSerializerForFaults *.wsdl *.xsd /config:InvoiceService_v1.config

Если я добавлю ссылку на службу с помощью Visual Studio, то сгенерированный прокси неправильно интерпретирует пользовательское определение ошибки.Необходимые настройки недоступны в пользовательском инструменте Visual Studio.

Однако я вижу файл Reference.svcmap, созданный инструментом Добавить ссылку на службу.Внутри есть несколько вариантов клиента:

<ClientOptions>
    <GenerateAsynchronousMethods>false</GenerateAsynchronousMethods>
    <EnableDataBinding>true</EnableDataBinding>
    <ExcludedTypes />
    <ImportXmlTypes>false</ImportXmlTypes>
    <GenerateInternalTypes>false</GenerateInternalTypes>
    <GenerateMessageContracts>false</GenerateMessageContracts>
    <NamespaceMappings />
    <CollectionMappings />
    <GenerateSerializableTypes>true</GenerateSerializableTypes>
    <Serializer>Auto</Serializer>
    <ReferenceAllAssemblies>true</ReferenceAllAssemblies>
    <ReferencedAssemblies />
    <ReferencedDataContractTypes />
    <ServiceContractMappings />
  </ClientOptions>

Можно ли настроить эти параметры, чтобы я мог использовать графический интерфейс вместо использования svcutil каждый раз?

Svcutil не загружает и автоматически не анализирует удаленные XSD, и третья сторона также разделила WSDL на отдельную привязку и интерфейс.Для подготовки каждого WSDL и XSD требуется немало ручной работы, прежде чем я смогу запустить svcutil.

Графический интерфейс упрощает процесс, но я не могу понять, как заставить его использовать альтернативные переключатели.

Я уже пытался добавить следующий вариант ClientOption, но он не работал,Без ошибок, но и без генерации классов:

<UseSerializerForFaults>false</UseSerializerForFaults>

Любые идеи приветствуются!

1 Ответ

2 голосов
/ 09 сентября 2013

В моем случае я просто отредактировал «Reference.svcmap» и сохранил его. Не беспокойтесь, он не изменится автоматически, когда вы обновите сервисную ссылку.поэтому просто добавьте в него этот атрибут, а затем обновите ссылку на службу.

...