如何:为 XML Web services 启用发现
本主题专门介绍一项旧有技术。现在应通过使用以下链接来创建 XML Web 服务和 XML Web 服务客户端: Windows Communication Foundation.
Web 服务可以通过下列方式发布到潜在的客户端:
使用带有 .disco 文件扩展名的 XML 发现文件。
使用指定 .vsdisco 扩展名的 URL。
使用带有查询字符串 ?DISCO 的 Web 服务。
本主题演示如何设置前两种发现机制。本主题不演示如何为带有查询字符串 ?DISCO 的 Web 服务启用请求,因为此方法已经自动可用了。有关这些选项的说明,请参见 XML Web services 发布和部署。
公开 Web 服务的静态发现文档
使用收藏夹编辑器创建一个 XML 文档,并将 ?xml version="1.0" ? 元素添加到第一行。
在该 XML 文档内添加一个 discovery 元素,例如
<disco:discovery xmlns:disco="https://schemas.xmlsoap.org/disco/"> </disco:discovery>
在 discovery 元素内,添加对服务说明、XSD 架构和其他发现文档的引用。
可以添加任意多个引用,以公共方式公开。服务说明引用通过添加具有
https://schemas.xmlsoap.org/disco/scl/
XML 命名空间的 contractRef 元素在发现文档中指定。同样,对其他发现文档和 XSD 架构的引用分别通过添加 discoveryRef 和 schemaRef XML 元素来指定。对于 XSD 架构引用,必须指定 XML 命名空间https://schemas.xmlsoap.org/disco/schema
。对于所有这三种类型的引用文档,都需要使用 ref 特性来指定文档位置。下面的代码示例包含对发现文档、服务说明和 XSD 架构的引用。<?xml version="1.0"?> <discovery xmlns="https://schemas.xmlsoap.org/disco/"> <discoveryRef ref="/Folder/Default.disco"/> <contractRef ref="http://MyWebServer/UserName.asmx?WSDL" docRef="Service.htm" xmlns="https://schemas.xmlsoap.org/disco/scl/"/> <schemaRef ref="Schema.xsd" xmlns="https://schemas.xmlsoap.org/disco/schema/"/> </discovery>
引用可相对于发现文档所驻留的目录,如 discoveryRef 元素中所示,或相对于 URI,如 contractRef 元素中所示。
通过将发现文档复制到 Web 服务器上的虚拟目录中,将其部署到 Web 服务器。
(可选)如果想允许预期使用者通过指定 IIS 应用程序而不必指定文档来导航到 URL,可以添加一个指向 IIS 应用程序默认页面的链接。这样做的好处是预期使用者不必知道任何发现文档的名称。然后,用户便可以在发现过程中提供类似于以下内容的 URL:
http://MyWebServer/MyWebApplication
如果 Web 应用程序的默认页面为 HTML 页,请在 Web 服务器的默认网页的 head 元素中添加一个指向发现文档的链接。例如,如果将发现文档命名为
MyWebService.disco
并将它与默认页面放在同一目录中,则需要在默认网页中放置以下元素:<HEAD> <link type='text/xml' rel='alternate' href='MyWebService.disco'/> </HEAD>
如果 Web 应用程序的默认页面是 XML 文档,请向 Web 服务器的默认网页的 head 元素中添加一个指向发现文档的链接。例如,如果将发现文档命名为
MyWebService.disco
并将它与默认页面放在同一目录中,则需要在默认页面的顶部放置以下内容:<?xml-stylesheet type="text/xml" alternate="yes" href="MyWebService.disco" ?>
为 Web 服务启用动态发现
若要为 Web 服务器启用动态发现,请通过添加以下 <add> 元素修改 machine.config 文件。请忽略以下示例中的分行符,因为 type 特性必须在同一行中。
<configuration> <system.web> <httpHandlers> <add verb="*" path="*.vsdisco" type="System.Web.Services.Discovery.DiscoveryRequestHandler, System.Web.Services, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="false"/> </httpHandlers> </system.web> </configuration>
注意: 当启用动态发现时,Web 服务器上请求的 URL 下存在的所有 Web 服务和发现文档都是可发现的。因此,启用动态发现时必须格外谨慎,因为如果 Web 服务器处于未使用防火墙和其他安全功能的网络中,可能会公开敏感数据。
另请参见
概念
XML Web services 发布和部署
使用 ASP.NET 创建的 XML Web services 的配置选项