WedX - журнал о программировании и компьютерных науках

Может ли wsdl.exe создавать те же файлы, что и Visual Studio при добавлении веб-ссылки?

Короткая, короткая версия

Может wsdl.exe создавать точно такие же файлы что делает Visual Studio при добавлении веб-ссылки?

В качестве альтернативы:

Какие команды Windows CMD будут имитировать действия Visual Studio при добавлении веб-ссылки?

Немного больше деталей

У меня есть проект VS2015, в котором используется веб-ссылка: https://webservices.netsuite.com /wsdl/v2016.xsd0/netsuite.wsdl (NetSuite — бле).

Я могу добавить ссылку на веб-службу в Visual Studio («Проект» -> «Добавить ссылку на службу» -> «Дополнительно» -> «Добавить веб-ссылку» -> «Ввести URL-адрес» -> «Добавить ссылку»), и она сгенерирует целую кучу файлов .xsd и .datasource:

Создано Visual Studio

Все полезно и радует. Ура.


Однако, когда я использую WSDL.exe, он генерирует только один файл: NetSuiteService.cs:

C:\CSharpPlayground\CSharpPlayground>mkdir "Web References\com.netsuite.webservices"

C:\CSharpPlayground\CSharpPlayground>wsdl.exe /:"Web References\com.netsuite.webservices" "https://webservices.netsuite.com/wsdl/v2016_2_0/netsuite.wsdl"
Microsoft (R) Web Services Description Language Utility
[Microsoft (R) .NET Framework, Version 4.6.1055.0]
Copyright (C) Microsoft Corporation. All rights reserved.
Writing file 'C:\CSharpPlayground\CSharpPlayground\NetSuiteService.cs'.

Я перелил wdsl.exe /? и не нашел ничего похожего, что могло бы мне помочь.

Разве wsdl.exe не подходит для этой работы?

Задний план

Я пытаюсь заставить сборки CI работать для моего проекта (мы самостоятельно размещаем экземпляр GitLab, поэтому я м с помощью gitlab-ci). Проект отлично строится на моем компьютере для разработки, потому что все эти файлы .xsd и .datasource существуют.

Однако они не существуют на машине сборки. Я обнаружил, что могу обновить данные WSDL с помощью цели/задачи MSBuild благодаря этому ответу. Поэтому я добавил это в свой файл .csproj, и он успешно загружает данные из NetSuite — только в один файл .cs, а не в коллекцию. Таким образом, сборка терпит неудачу.

Я мог бы просто зарегистрировать все файлы веб-ссылок на git, но я бы предпочел не делать этого, если в этом нет крайней необходимости.

Обновление 1 (13 марта 2017 г., 15:56 по тихоокеанскому времени)

@RasmusW ниже упомянул более новую утилиту scvutil.exe. Это часть пути - он генерирует отдельные файлы .xsd (файлы .datasource могут не понадобиться).

Однако сгенерированные файлы .xsd названы неправильно. Они используют значение namespace, а не значение schemaLocation.

Например, в файле .wsdl, предоставленном NetSuite, мы имеем:

<xsd:import namespace="urn:types.accounting_2015_2.lists.webservices.netsuite.com" schemaLocation="https://webservices.netsuite.com/xsd/lists/v2015_2_0/accountingTypes.xsd"/>

Сгенерированный файл имеет номер types.accounting_2015_2.lists.webservices.netsuite.com.xsd, а не accountingTypes.xsd.

Кроме того, есть и другие файлы, созданные VS2015:

  • NetSuiteService.cs

    • This I can get by using wsdl.exe /out:"Web References\com.netsuite.webservices\\" https://webservices.netsuite.com/wsdl/v2015_2_0/netsuite.wsdl. It returns the exact same file as what VS2015 creates.
  • Reference.cs

    • No idea what this really is or how it's generated. It appears to be very similar to what's in NetSuiteService.cs though.
  • Reference.map

    • This is an xml file that has a bunch of DiscoveryClientResult items that map a url to a filename. I assume that this is how Visual Studio gets the names for the .xsd files, but I'm not sure.
    • Выглядит примерно так: <DiscoveryClientResult referenceType="System.Web.Services.Discovery.SchemaReference" url="https://webservices.netsuite.com/xsd/lists/v2015_2_0/accountingTypes.xsd" filename="accountingTypes.xsd" />

  • По какой-то конкретной причине вы хотите использовать wsdl.exe, а не svcutil.exe? Чтобы узнать о разнице между wsdl.exe и svcutil.exe, вы можете проверить этот вопрос: stackoverflow.com/questions/18311816/ 14.03.2017
  • @RasmusW Потому что я не знал о svcutil.exe :-) Очень поверхностная проверка этого инструмента приводит к тому же результату - генерируется один файл. В настоящее время я просматриваю варианты, чтобы увидеть, есть ли флаги, которые я могу установить. 14.03.2017

Ответы:


1

Примечание. Все приведенное ниже относится к используемому мной файлу WSDL (0/netsuite.wsdl" rel="nofollow noreferrer">NetSuite< /a>), так что это может не сработать для вас. Но эй, это стоит попробовать!

После некоторых экспериментов, вот что я придумал, чтобы ответить на вопрос:

Какие команды Windows CMD будут имитировать действия Visual Studio при добавлении веб-ссылки?

  1. VS создает папку веб-ссылок и папку пространства имен. Это необходимо сделать, потому что следующие шаги не обязательно создают папки для вас. Обратите внимание, что вам нужно будет соответствующим образом изменить имена папок. В этом примере com.netsuite.webservices — это пространство имен, в которое все помещается.

    SET OUR_DIR="%PROJECT_NAME%\Web References\com.netsuite.webservices"
    mkdir "%OUR_DIR%"
    
  2. #P4#
    wsdl.exe /out:"%OUR_DIR%\NetSuiteService.cs" %WSDL_URL%
    
    <цитата> #P5#
  3. Создайте файлы .xsd с disco.exe. инструмент. Хех веселое имя.

    disco.exe /out:"%OUR_DIR%" %WSDL_URL%
    

    Это создает отдельные файлы .xsd, которые были показаны на снимке экрана в вопросе выше. Он также создает файл карты, который сопоставляет имена, чтобы сделать вещи красивыми (см. Обновление 1, о котором идет речь). Однако я не смог понять, как изменить выходное имя файла карты (по умолчанию results.discomap), поэтому я просто делаю это вручную:

    move "%OUR_DIR%\results.discomap" "%OUR_DIR%\Reference.map"
    

Приведенные выше шаги дают вам почти все — файлы точно соответствуют тому, что создает Visual Studio (2015), но Reference.cs по-прежнему отсутствует. Этот файл очень похож на сгенерированный WSDL код NetSuiteService.cs, но помещает все в пространство имен из шага 1 (папка, com.netsuite.webservices).

К сожалению, я не смог понять, как сгенерировать этот файл Reference.cs.

Мое единственное решение состояло в том, чтобы сгенерировать этот файл на моей машине разработки, скопировать его куда-нибудь, к которому я могу легко получить доступ, а затем загрузить/скопировать его в папку сборки во время сборки CI. Например, я поместил его в папку C:\Utilities на машине сборки, чтобы я мог извлечь его с помощью

copy "C:\Utilities\NetSuite_DO_NOT_DELETE__Reference.cs" "%OUR_DIR%\Reference.cs"
14.03.2017
Новые материалы

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

ИИ в аэрокосмической отрасли
Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


Для любых предложений по сайту: [email protected]