Учитывая файл типа wsdl + xds, как мне создать заглушку веб-сервиса WCF?

Я понимаю, что это основная тема, но никогда не делал этого, прежде чем начинать с wsdl.

Мне вручают файл wsdl и кучу xsd с определениями типов. Я понятия не имею, были ли они созданы из службы WCF (думаю, из-за разделенного формата), но мне нужно создать службу WCF, которая реализует контракт.

Вопрос: Как мне получить интерфейс контракта на обслуживание?

Я знаю о wsdl.exe и svcutil.exe - но не слишком знаком с тем, что к чему. Я предполагаю, что после этого все, что осталось, это реализовать сервисный контракт.

Любая помощь приветствуется!

P.S. У меня был еще один вопрос по этому поводу, но я попытался вставить слишком много вещей в один и тот же вопрос, так что давайте пока не будем усложнять.


person JohnIdol    schedule 23.01.2010    source источник


Ответы (1)


У вас есть два варианта:

Вариант 1. Используйте утилиту svcutil.exe в командной строке. Он должен быть установлен в ваш каталог C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin (или что-то подобное, в зависимости от вашей машины и ОС)

Использовать svcutil -? для списка всех многих параметров. По сути, в самой простой форме используйте:

svcutil  (name of your service).wsdl (name of your datafile).xsd

и это создаст соответствующий файл (name of your service).cs C# с контрактами службы и данных, а также образец файла конфигурации.

Результирующий файл *.cs (или *.vb, если вы хотите VB.NET) будет содержать контракт службы (методы, полученные из WSDL) и контракты данных (часть данных, поступающая из XSD) для вашей службы. .

Вариант 2. Используйте диалоговое окно "Добавить ссылку на службу" в Visual Studio (в узле "Ссылки" в обозревателе решений) и просто введите имя файла WSDL:

Диалоговое окно добавления ссылки на службу

Это создаст ссылку на службу, которая в основном аналогична выходным данным утилиты svcutil.exe, плюс несколько вспомогательных классов и файлов для Visual Studio.

К сожалению, в обоих случаях импорт создаст ужасно перегруженный файл конфигурации, что, вероятно, является одной из причин, по которой многие программисты считают WCF ужасно сложным — на самом деле это не так, но эти два инструмента импорта ужасно плохо справляются с созданием базового файла. config для вас.... пусть это вас не пугает!

Если ссылка на добавление службы для WSDL не преобразует автоматически все соответствующие и необходимые XSD-файлы, вам может потребоваться добавить их в свой проект, а затем использовать что-то вроде XSD2Code, чтобы преобразовать их в классы C# (или VB.NET).

wsdl.exe — это устаревшая утилита для преобразования файла WSDL в заглушку ASMX (веб-служба ASP.NET) — больше не используйте ее, используйте svcutil.exe или Visual Studio Add Service Reference для WCF.

Что касается того, как создать правильную и минимальную конфигурацию WCF, ознакомьтесь с телешоу DotNet Rocks № 122 с Мигелем Кастро под названием Экстремальный WCF. Miguel предлагает отличный способ структурировать ваши проекты WCF и создать столько конфигурации, сколько действительно необходимо (и, таким образом, его можно понять намного лучше, чем сгенерированный svcutil беспорядок).

person marc_s    schedule 23.01.2010
comment
Спасибо за помощь! - из догадок я уже пытался добавить ссылку, к моему удивлению, интерфейс не появился, просто куча классов (согласно спецификации, которую я получил с wsdl). Кроме того, что касается файла конфигурации, могу ли я просто выбросить его и запустить новую службу, реализующую контракт службы и включающую типы данных? - person JohnIdol; 23.01.2010
comment
@JohnIdol: конечно, вы можете выбросить конфигурацию, а затем воссоздать только то, что вам нужно. В целом неплохая идея :-) Обычно, когда вы добавляете ссылку на службу, вы должны получить кучу классов, но в одном из файлов где-то должен быть интерфейс, на котором вы можете основывать свою реализацию службы. - person marc_s; 23.01.2010
comment
@marc_s: я думаю, что я выбрал «добавить веб-ссылку» (использовал локальный хост), а не «добавить ссылку на службу», когда пытался в прошлый раз. Будет ли это иметь значение с точки зрения интерфейса, который не отображается? ;) - person JohnIdol; 23.01.2010
comment
Да: добавление веб-ссылки используется для устаревшего веб-сервиса ASP.NET/ASMX. Для WCF обязательно используйте Add Service Reference! - person marc_s; 23.01.2010
comment
Прохладный! спасибо за подсказки и поддержку - попробую все, потом отчитаюсь :) - person JohnIdol; 23.01.2010
comment
@marc_s: об этом - есть ли аргумент строки cmd для импорта только интерфейсов с использованием svcutil? создаваемый исходный файл огромен и сильно украшен - было бы неплохо, по крайней мере, иметь возможность разбиения на разные файлы. Также странные вещи, такие как объекты запроса/ответа, обернутые в другие объекты с декорированными именами (такими как [className] + 1) - person JohnIdol; 25.01.2010
comment
Я думаю, будет справедливо открыть еще один вопрос - просто чтобы разделить проблемы --› stackoverflow.com/questions/2132274/ (и поставить на карту еще несколько представителей) - person JohnIdol; 25.01.2010