Конечные точки веб-служб, основанные на WSDL-файлах

Обновлен: Ноябрь 2007

Определять функции служб можно на основе контрактов. Эту задачу можно выполнить путем создания конечных точек поставщика веб-службы из WSDL-файлов. Также можно выполнить согласование существующих конечных точек поставщика веб-службы с WSDL-файлами.

Bb385701.alert_note(ru-ru,VS.90).gifПримечание.

Такие задачи можно выполнить с помощью DISCO-файлов. В этой версии поддерживаются только WSDL-файлы, содержащие единственную привязку WSDL, и DISCO-файлы, ссылающиеся на единственную веб-службу. Дополнительные сведения см. в разделе Обмен данными между приложениями.

Дополнительные сведения см. в следующих подразделах:

  • Creating Web Service Endpoints from WSDL Files

  • Conforming Web Service Endpoints to WSDL Files

  • Web Service Endpoints Based on WSDL Files

  • Custom Types Referenced in Operation Signatures

Дополнительные сведения о проектировании служб на основе контрактов см. на странице Contract First Web Services Interoperability веб-узла MSDN по адресу https://go.microsoft.com/fwlink/?LinkId=49584 (на английском языке).

Создание конечных точек веб-службы из WSDL-файлов

В приложениях и системах ASP.NET можно создавать конечные точки на основе WSDL-файлов. Такая конечная точка выводится в приложении или в системе. Она заполняется подписями операций, на которые ссылается WSDL-файл. Эти подписи операций также выводятся в файле класса веб-службы, если сопоставленное приложение уже реализовано. В проекте приложения также могут появиться дополнительные файлы классов, если эти подписи ссылаются на пользовательские типы. Дополнительные сведения см. в разделе Custom Types Referenced in Operation Signatures.

Bb385701.alert_note(ru-ru,VS.90).gifПримечание.

Реализация возможна только для приложений и невозможна для систем.

Создание конечной точки поставщика веб-службы из WSDL-файла эквивалентно использованию программы командной строки Wsdl.exe с параметром /server. Дополнительные сведения см. в следующих разделах:

Согласование конечных точек веб-службы с WSDL-файлами

Можно выполнить согласование существующих конечных точек поставщика веб-службы с WSDL-файлами. В результате добавляются или изменяются существующие подписи операции, чтобы согласовать их с WSDL-файлом. Такое действие также может повлиять на подписи операций и имена типов в программном коде, если сопоставленное приложение уже реализовано. Однако для вложенных типов в наборах данных согласование не выполняется.

Bb385701.alert_note(ru-ru,VS.90).gifПримечание.

При согласовании конечной точки в элементе системы фактически выполняется согласование базового определения конечной точки. Это действие изменяет варианты использования этого определения в других системах.

Основной код метода не будет изменяться, однако в результате изменений подписей операций и имен типов код метода может не компилироваться. Поэтому следует проверить код. Определите изменения, которые может понадобиться внести для устранения ошибок компилятора. Дополнительные сведения см. в разделе Изменения в коде после согласования конечных точек веб-службы с WSDL-файлами.

Конечные точки веб-служб, основанные на WSDL-файлах

В WSDL-файле заданы требования по предоставлению и использованию веб-службы. Этот файл служит контрактом между поставщиком и потребителем. Конечные точки веб-службы, основанные на одной версии WSDL-файла, можно заменять между собой. Дополнительные сведения см. в разделе Замена конечных точек веб-службы.

Определение привязки WSDL в WSDL-файле описывает операции, предоставляемые веб-службой. Конечная точка поставщика веб-службы представляет такую привязку WSDL. Если в сопоставленном приложении ASP.NET включено создание WSDL-файлов, то среда Visual Studio создает новый WSDL-файл для каждой веб-службы в этом приложении (после его реализации). Среда Visual Studio также использует этот WSDL-файл для создания веб-ссылок для сопоставленных приложений-потребителей веб-службы (после их реализации). Дополнительные сведения см. в разделе Практическое руководство. Управление созданием WSDL-файлов для веб-служб ASP.NET.

После публикации WSDL-файла для веб-службы каждое изменение в определении веб-службы считается новой привязкой WSDL.

Bb385701.alert_note(ru-ru,VS.90).gifСовет.

Если изменяется определение веб-службы, необходимо изменить имя привязки WSDL, пространство имен привязки WSDL или оба этих свойства. Если изменить определение веб-службы, не изменяя имя или пространство имен привязки WSDL, может остаться незаметным тот факт, что веб-служба больше не совместима с подключенными приложениями или приложениями, которые были подключены ранее. По умолчанию имя службы WSDL и имя привязки WSDL имеют значение "WebServiceN", где "N" представляет порядковый номер. Однако после реализации приложение в результате удаления имени привязки WSDL в файле класса веб-службы значение по умолчанию меняется на "WebServiceNSoap". Для пространства имен службы WSDL и пространства имен привязки WSDL по умолчанию используется значение "http://tempuri.org". Для описания службы WSDL и расположения привязки WSDL не используются значения по умолчанию. Для имени привязки WSDL по умолчанию используется значение "WebServiceN".

Если изменяется имя привязки или пространство имен привязки WSDL в нереализованной конечной точке поставщика веб-службы, соответствующие свойства во всех подключенных и нереализованных конечных точках потребителя обновляются автоматически или обновляются при повторном подключении. Однако если эти свойства изменяются в реализованной конечной точке поставщика веб-службы, то подключенные и реализованные конечные точки потребителя веб-службы могут не обновиться немедленно. Для таких конечных точек потребителя можно обновить эти свойства вручную.

Пользовательские типы, на которые ссылаются подписи операций

Подписи операций в конечной точке веб-службы могут ссылаться на класс CLR, которые выполняют сериализацию XML-кода для сложных XML-типов, на которые существуют ссылки в WSDL-файле или связанных файлах XML-схем. Если сопоставленное приложение еще не реализовано, среда Visual Studio создает файлы кода для этих классов во время реализации. Эти файлы создаются вместе с соответствующими файлами веб-службы и проекта приложения. Если приложение уже реализовано, то среда Visual Studio добавляет файлы кода для этих классов в существующий проект. Дополнительные сведения см. в разделе Общие сведения о приложениях ASP.NET на диаграммах приложений.

Bb385701.alert_note(ru-ru,VS.90).gifПримечание.

Когда конечная точка веб-службы, основанная на WSDL-файле, копируется в другое приложение, среда Visual Studio копирует только подписи операций. Если конечное приложение уже реализовано, то файлы кода для дополнительных классов CLR не копируются. Если конечное приложение еще не реализовано, то файлы кода для этих классов не создаются во время реализации. Чтобы избежать возникновения такой ситуации, создавайте конечные точки из того же WSDL-файла или DISCO-файла, который использовался для копируемых конечных точек.

В некоторых XML-схемах для класса веб-службы и классов сериализации данных необходимы дополнительные атрибуты сериализации, чтобы обеспечить правильное форматирование XML-кода. Однако конечные точки поставщика веб-службы, основанные на WSDL-файлах, поддерживают только малый набор таких атрибутов сериализации. В небольшом числе случаев результирующий WSDL-файл, создаваемый для конечной точки веб-службы, и результирующие XML-сообщения могут находиться в разногласии с исходным WSDL-файлом, который использовался для создания конечной точки поставщика веб-службы.

Bb385701.alert_note(ru-ru,VS.90).gifСовет.

Если возникают описанные проблемы, то вместо создания конечной точки поставщика веб-службы из WSDL-файла используйте программу Wsdl.exe для создания класса веб-службы и классов сериализации данных. Однако в этом случае понадобится вручную добавить полученный код в проект, а затем создать необходимый ASMX-файл. В результате образуется работоспособная конечная точка поставщика веб-службы. Это позволит использовать конструктор для изменения конечной точки.

В следующем списке содержатся дополнительные сведения о поддержке этих атрибутов реализации.

  • Данные атрибуты сериализации XML-кода добавляются в классы, созданные для сложных XML-типов: SerializableAttribute, SoapTypeAttribute, XmlIncludeAttribute, XmlRootAttribute и XmlTypeAttribute.

  • Эти атрибуты сериализации XML-кода добавляются в поля классов: XmlAnyAttribute, XmlArrayAttribute, XmlArrayItemAttribute, XmlAttributeAttribute, XmlChoiceIdentifierAttribute, XmlElementAttribute, XmlEnumAttribute, XmlIgnoreAttribute, XmlNamespaceDeclarationsAttribute и XmlTextAttribute.

  • Атрибуты сериализации не применяются к возвращаемому типу веб-методов.

  • Атрибуты сериализации не применяются к параметрам веб-методов.

  • Следующие атрибуты сериализации с кодом SOAP не применяются к этим классам: SoapElementAttribute, SoapIgnoreAttribute, SoapAttributeAttribute, SoapAttributeOverrides, SoapAttributes, SoapEnumAttribute и SoapIncludeAttribute.

  • Аргументы атрибутов, для которых необходим сложный XML-тип, создаются в виде значения типа String с полным именем типа. Это вызовет ошибку компилятора, которую будет необходимо исправить.

    Например, атрибут <XmlIncludeAttribute(GetType("ClassName"))> в Visual Basic создается в виде <XmlIncludeAttribute("ClassName")>, а атрибут [XmlIncludeAttribute(typeof("ClassName"))] в Visual C# создается в виде [XmlIncludeAttribute("ClassName")].

См. также

Задачи

Практическое руководство. Добавление конечных точек в приложения

Практическое руководство. Согласование конечных точек веб-служб с WSDL-файлами

Основные понятия

Общие сведения о конечных точках в приложениях