Как использовать файл WSDL для создания службы WCF (не звонить)

100

У меня есть старый файл WSDL, и я хочу создать сервер на основе этого файла WSDL.

WSDL генерируется из ASMX (я предполагаю, но не уверен).

Как я могу этого добиться?


исходный вопрос, где OP думал, что ему нужно создать клиента на основе WSDL.

Раха
источник

Ответы:

112

Используя svcutil, вы можете создавать интерфейсы и классы (контракты данных) из WSDL.

svcutil your.wsdl (or svcutil your.wsdl /l:vb if you want Visual Basic)

Это создаст файл с именем your.cs в C # (или your.vb в VB.NET), который содержит все необходимые элементы.

Теперь вам нужно создать класс MyService, который будет реализовывать интерфейс службы (IServiceInterface) - или несколько интерфейсов службы - и это ваш экземпляр сервера.

Сам по себе класс еще не помогает - вам нужно где-то разместить службу. Вам нужно либо создать собственный экземпляр ServiceHost, на котором размещена служба, настроить конечные точки и т. Д., Либо вы можете разместить свою службу внутри IIS.

marc_s
источник
Я пробовал то же самое с svcutil, но у меня не получалось с ошибками. Может быть, у вас есть предложения по моей проблеме: goo.gl/dlen
Юрий,
15
"svcutil your.wsdl your.xsd" - это то, что мне нужно для работы моей! Спасибо!
Тим Льюис
3
Ознакомьтесь с этим SO-ответом для получения информации о загрузке wsdl и xsd в формате, который понравится svcutil. stackoverflow.com/questions/286657/…
Бретт Видмайер,
@marc_s Когда я использую это с моим файлом WSDL, кажется, что некоторые элементы переименовываются очень странным образом, так что запросы, поступающие на мой сервер, даже не принимаются. Это нормально?
Arj
@Arjun: нет - похоже, вам нужно собрать все относящиеся к делу факты и задать вопрос на Stackoverflow! :-)
marc_s
41

Есть хорошие ресурсы, если вы знаете, что искать. Попробуйте «сначала контракт» и WCF. или «Сначала WSDL» и WCF.

Вот подборка:

Чизо
источник
3
Всем, кто следит за базовым обзором статьи WSDL-First : обратите внимание на комментарий, о котором говорится ReplyAction="*". Похоже, от этого нужно избавиться. В этом комментарии есть следы объяснений, которые дают рассуждение, но я его не читал.
dan-gph
30

Используйте svcutil.exe с /scпереключателем для создания контрактов WCF. Это создаст файл кода, который вы можете добавить в свой проект. Он будет содержать все интерфейсы и типы данных, необходимые для создания вашей службы. Измените расположение вывода, используя /oпереключатель, или вы можете найти файл в папке, в которой вы запустили svcutil.exe. Язык по умолчанию - C #, но я думаю (никогда не пробовал) вы можете изменить это, используя /l:vb.

svcutil /sc "WSDL file path"

Если ваш WSDL имеет какие-либо поддерживающие файлы XSD, передайте их в качестве аргументов после WSDL.

svcutil /sc "WSDL file path" "XSD 1 file path" "XSD 2 file path" ... "XSD n file path"

Затем создайте новый класс, который является вашей службой, и реализуйте только что созданный интерфейс контракта.

Деннис Калла
источник
7

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

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

Джон Сондерс
источник
4

Используя инструмент «Добавить ссылку на службу» в Visual Studio, вы можете вставить адрес как:

файл: ///path/to/wsdl/file.wsdl

И он загрузится правильно.

Вагнер Гон
источник