/sharedtypes, эквивалентный для svcutil.exe?

Создание приложения, которое полагается на стороннего поставщика, у которого есть очень подробный набор сервисов SOAP (мы говорим 50 + файлы WSDL). Каждый отдельный WSDL однако имеет многочисленные общие описания типа. При генерировании клиентского кода с wsdl.exe, там используемым, чтобы быть флагом/sharedtypes, который объединил бы дублирующиеся записи, если бы тип несколько раз находился.

Когда я пытаюсь сгенерировать свой клиентский код, я бомблю на этих перекрывающихся типах, которые третья сторона включает во все их файлы WSDL.

svcutil /t:code /importxmltypes [mypath]/*.wsdl

Результаты в сообщениях об ошибках, ссылающихся на коллизии типа. Например, пара образцов сообщений об ошибках ниже:

Error: There was an error verifying some XML Schemas generated during export:
The simpleType 'http://common.soap.3rdparty.com:CurrencyNotation' has already been
declared.

Error: There was an error verifying some XML Schemas generated during export:
The complexType 'http://common.soap.3rdparty.com:NumberFormat' has already been 
declared.

Я не управляю выводом WSDLs. Я не хочу должным быть редактировать WSDLs вручную из страха ошибки, которая прерывает вид во времени выполнения, которое было бы очень трудно отследить назад к нашему редактированию файлов WSDL. Не говоря уже о том, что существует 50 некоторые файлы WSDL, которые колеблются от 200-1200 строк XML. (Напомните мне снова, почему мы думали, что SOAP был большим спасением нам всем назад в конце 90-х?)

17
задан Reinderien 1 December 2012 в 05:12
поделиться

1 ответ

Попробуйте указать все WSDL в одной команде:

svcutil http://example.com/service1?wsdl http://example.com/service2?wsdl ...

Это автоматически устранит дубликаты типов. Другой вариант - взглянуть на переключатель команды /reference:

/reference:<file path>        - Add the specified assembly to the set of
                                assemblies used for resolving type
                                references. If you are exporting or
                                validating a service that uses 3rd-party
                                extensions (Behaviors, Bindings and
                                BindingElements) registered in config use
                                this option to locate extension assemblies
                                that are not in the GAC.  (Short Form: /r)

Это означает, что если у вас уже есть некоторые типы, определенные в какой-то сборке, вы можете включить эту сборку, и svcutil исключит типы из нее, чтобы избежать дубликатов:

svcutil /reference:someassembly.dll http://example.com/service?wsdl
2
ответ дан 30 November 2019 в 14:54
поделиться
Другие вопросы по тегам:

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