基于 WSDL 文件的 Web 服务终结点

更新:2007 年 11 月

您可以使用协定驱动的方法定义服务行为。可通过基于 Web 服务描述语言 (WSDL) 文件创建 Web 服务提供方终结点来执行此任务。此外还可以使现有的 Web 服务提供方终结点符合 WSDL 文件。

说明:

可以使用 .disco 文件来执行这些任务。此版本只支持包含单个 WSDL 绑定的 WSDL 文件以及引用单个 Web 服务的 .disco 文件。有关更多信息,请参见应用程序之间的通信

有关更多信息,请参见下列章节:

  • 基于 WSDL 文件创建 Web 服务终结点

  • 使 Web 服务终结点符合 WSDL 文件

  • 基于 WSDL 文件的 Web 服务终结点

  • 操作签名中引用的自定义类型

有关协定驱动的服务设计的更多信息,请参见位于 https://go.microsoft.com/fwlink/?LinkId=49584 上的 MSDN Online 中的“Contract First Web Services Interoperability”(协定第一个 Web 服务互操作性)页。

基于 WSDL 文件创建 Web 服务终结点

可以在 ASP.NET 应用程序和系统上创建基于 WSDL 的终结点。此终结点显示在应用程序或系统上。它用 WSDL 文件引用的操作签名填充。如果关联的应用程序已经实现,则这些操作签名还显示在 Web 服务类文件中。如果这些签名引用了任何自定义类型,应用程序的项目中还可能显示其他类文件。有关更多信息,请参见操作签名中引用的自定义类型。

说明:

只能实现应用程序,而不能实现系统。

从 WSDL 文件创建 Web 服务提供者终结点所生成的结果与使用带有 /server 选项的 Wsdl.exe 命令行实用工具是一样的。有关更多信息,请参见以下内容:

使 Web 服务终结点符合 WSDL 文件

您可以使现有的 Web 服务提供方终结点符合 WSDL 文件。此操作会添加或更改任何现有的操作签名,以使它们符合 WSDL 文件。如果关联的应用程序已经实现,则此操作还可能影响代码中的操作签名和类型名称。但是,数据集中嵌套的类型将不会符合 WSDL 文件。

说明:

使系统成员上的终结点符合 WSDL 文件实际上是使基础终结点定义符合 WSDL 文件。此操作会修改该定义在其他系统中的用法。

虽然方法体代码将保持不变,但对操作签名和类型名称所做的更改可能会导致方法体代码不再能编译。因此,请检查您的代码,并确定修复任何编译器错误时可能需要的更改。有关更多信息,请参见在使 Web 服务终结点符合 WSDL 文件之后进行的代码更改

基于 WSDL 文件的 Web 服务终结点

WSDL 文件指定提供和使用 Web 服务的要求。它充当提供方和使用方之间的协定。使用基于同一版本的 WSDL 文件的 Web 服务终结点还可以替换这些终结点。有关更多信息,请参见 替换 Web 服务终结点

WSDL 文件中的 WSDL 绑定定义描述由 Web 服务提供的操作。此 WSDL 绑定由 Web 服务提供方终结点表示。如果关联的 ASP.NET 应用程序允许生成 WSDL 文件,Visual Studio 将为该应用程序上的每个 Web 服务都生成一个新的 WSDL 文件(在实现该应用程序后)。Visual Studio 还会使用此 WSDL 文件生成关联的 Web 服务使用方应用程序的 Web 引用(在实现这些应用程序后)。有关更多信息,请参见如何:控制 ASP.NET Web 服务的 WSDL 文件生成

发布了 Web 服务的 WSDL 文件后,对 Web 服务定义所做的每项更改都将被视为新的 WSDL 绑定。

提示:

更改 Web 服务定义时,应更改 WSDL 绑定名称和/或 WSDL 绑定命名空间。如果在更改 Web 服务的定义时不更改它的 WSDL 绑定名称或命名空间,则可能会隐瞒 Web 服务不再与所连接的或以前连接的应用程序兼容这一事实。WSDL 服务名称和 WSDL 绑定名称的默认值是“WebServiceN”,其中“N”表示序号。但是,一旦实现了应用程序,就会在删除 Web 服务类文件中的 WSDL 绑定名称时,将该默认值更改为“WebServiceNSoap”。WSDL 服务命名空间和 WSDL 绑定命名空间的默认值为“http://tempuri.org”。WSDL 服务说明和 WSDL 绑定位置属性没有默认值。WSDL 绑定名称的默认值为“WebServiceN”。

当更改未实现的 Web 服务提供方终结点上的 WSDL 绑定名称或绑定命名空间时,任何已连接但未实现的使用方终结点的对应属性都将自动更新或者在重新连接时更新。但是,当更改已实现的 Web 服务提供者终结点的这些属性时,任何已连接且已实现的 Web 服务使用方终结点可能不会立即更新。但是,您可以手动更新这些使用方终结点的这些属性。

操作签名中引用的自定义类型

Web 服务终结点中的操作签名可能会引用某些 CLR 类,这些类用于处理 WSDL 文件或相关 XML 架构文件中所引用的复杂 XML 类型的 XML 序列化。如果关联的应用程序尚未实现,Visual Studio 将在实现时生成这些类的代码文件。除了这些文件外,它还会生成相应的 Web 服务和应用程序项目文件。如果应用程序已经实现,它会将这些类的代码文件添加到现有的项目中。有关更多信息,请参见应用程序关系图上的 ASP.NET 应用程序概述

说明:

将基于 WSDL 的 Web 服务终结点复制到另一个应用程序中时,Visual Studio 将仅复制操作签名。如果目标应用程序已经实现,它将不复制其他 CLR 类的代码文件。如果目标应用程序尚未实现,它在实现时将不会生成这些类的代码文件。若要避免这种情况,请基于要复制的终结点所使用的 WSDL 或 .disco 文件创建终结点。

在某些 XML 架构中,Web 服务类和数据序列化类还需要其他序列化属性,以确保正确设置 XML 的格式。但是,基于 WSDL 的 Web 服务提供方终结点只支持这些序列化属性中的一小部分。在为数不多的一些情况下,为 Web 服务终结点生成的结果 WSDL 文件和结果 XML 消息可能与用来创建 Web 服务提供方终结点的原始 WSDL 文件不一致。

提示:

出现这些问题时,应使用 Wsdl.exe 实用工具生成 Web 服务类和数据序列化类,而不是基于 WSDL 文件创建 Web 服务提供方终结点。但是,您需要将所生成的代码手动添加到项目中并创建必要的 .asmx 文件。随后会出现一个正确的 Web 服务提供方终结点。这样便可以使用设计器编辑该终结点。

下面的列表包含有关对这些序列化属性的支持的更多信息:

  • 下列 XML 序列化属性被添加到为复杂的 XML 类型生成的类:SerializableAttribute、SoapTypeAttribute、XmlIncludeAttribute、XmlRootAttribute 和 XmlTypeAttribute。

  • 下列 XML 序列化属性被添加到类字段:XmlAnyAttribute、XmlArrayAttribute、XmlArrayItemAttribute、XmlAttributeAttribute、XmlChoiceIdentifierAttribute、XmlElementAttribute、XmlEnumAttribute、XmlIgnoreAttribute、XmlNamespaceDeclarationsAttribute 和 XmlTextAttribute。

  • 序列化属性不适用于 Web 方法的返回类型。

  • 序列化属性不适用于 Web 方法的参数。

  • 下面的 SOAP 编码的序列化属性不适用于这些类:SoapElementAttribute、SoapIgnoreAttribute、SoapAttributeAttribute、SoapAttributeOverrides、SoapAttributes、SoapEnumAttribute 和 SoapIncludeAttribute。

  • 需要复杂 XML 类型的属性参数以该类型的完全限定名作为 String 类型生成。这将导致需要修正的编译器错误。

    例如,Visual Basic 中的 <XmlIncludeAttribute(GetType("ClassName"))> 作为 <XmlIncludeAttribute("ClassName")> 生成,而 Visual C# 中的 [XmlIncludeAttribute(typeof("ClassName"))] 作为 [XmlIncludeAttribute("ClassName")] 生成。

请参见

任务

如何:向应用程序添加终结点

如何:使 Web 服务终结点符合 WSDL 文件

概念

应用程序终结点概述