如何:为 XML Web services 启用发现

本主题专门介绍一项旧有技术。现在应通过使用以下链接来创建 XML Web 服务和 XML Web 服务客户端: Windows Communication Foundation.

Web 服务可以通过下列方式发布到潜在的客户端:

  • 使用带有 .disco 文件扩展名的 XML 发现文件。

  • 使用指定 .vsdisco 扩展名的 URL。

  • 使用带有查询字符串 ?DISCO 的 Web 服务。

本主题演示如何设置前两种发现机制。本主题不演示如何为带有查询字符串 ?DISCO 的 Web 服务启用请求,因为此方法已经自动可用了。有关这些选项的说明,请参见 XML Web services 发布和部署

公开 Web 服务的静态发现文档

  1. 使用收藏夹编辑器创建一个 XML 文档,并将 ?xml version="1.0" ? 元素添加到第一行。

  2. 在该 XML 文档内添加一个 discovery 元素,例如

    <disco:discovery xmlns:disco="https://schemas.xmlsoap.org/disco/">
    </disco:discovery>
    
  3. discovery 元素内,添加对服务说明、XSD 架构和其他发现文档的引用。

    可以添加任意多个引用,以公共方式公开。服务说明引用通过添加具有 https://schemas.xmlsoap.org/disco/scl/ XML 命名空间的 contractRef 元素在发现文档中指定。同样,对其他发现文档和 XSD 架构的引用分别通过添加 discoveryRefschemaRef 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 元素中所示。

  4. 通过将发现文档复制到 Web 服务器上的虚拟目录中,将其部署到 Web 服务器。

  5. (可选)如果想允许预期使用者通过指定 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 服务启用动态发现

  1. 若要为 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>
    
    tewz1055.note(zh-cn,VS.100).gif注意:
    当启用动态发现时,Web 服务器上请求的 URL 下存在的所有 Web 服务和发现文档都是可发现的。因此,启用动态发现时必须格外谨慎,因为如果 Web 服务器处于未使用防火墙和其他安全功能的网络中,可能会公开敏感数据。

另请参见

概念

XML Web services 发布和部署
使用 ASP.NET 创建的 XML Web services 的配置选项

其他资源

使用 ASP.NET 的 XML Web services