ASP.NET创建Web服务之发布和部署
部署一个XML Web服务包括复制.asmx文件和任何XML Web服务使用的汇编文件,而不要把Microsoft.NET Framework的一部分作为Web 服务器 上的虚拟目录。有关如何部署一个XML Web服务的信息,请参见"部署XML Web服务"。XML Web服务对使用发现机制的用户适用。用户
部署一个XML
Web服务包括复制.asmx文件和任何XML
Web服务使用的汇编文件,而不要把Microsoft
.NET Framework的一部分作为Web
服务器上的虚拟目录。有关如何部署一个XML Web服务的信息,请参见"部署XML Web服务"。XML Web服务对使用发现机制的用户适用。用户可以浏览一个特殊的发现文件或Web
服务器的根来定位发现文件。从这些文件中,他们可以判断那些服务对他们来说有用。
部署XML Web服务 部署一个XML Web服务包括把.asmx文件和任何XML Web服务使用的汇编文件,而不是Microsoft.NET Framework的一部分,复制到Web服务器上。
例如,假设你把一个XML Web服务命名为StockServices。为了部署XML Web服务,你需要在你的Web服务器上创建一个虚拟目录和把XML Web服务的.asmx文件放入这个目录。这个虚拟目录还应该是一个IIS Web应用程序,虽然它不是必需的。一个典型的部署将有下面的目录结构:
\Inetpub \Wwwroot \StockServices StockServices.asmx \Bin |
你的XML Web服务使用的汇编不是Microsoft.NET Framework一部分的。
XML Web服务发布的条目 当你发布一个XML Web服务时,下列条目用来部署一个Web服务器。
条目 |
描述 |
Web应用程序目录 |
作为你的XML Web服务的根目录。所有的文件都存放在这个目录中。这个目录应该被标记为一个IIS Web应用程序所用。 |
<MyXMLWebService>.asmx 文件 |
调用XML Web服务的客户端的基本URL。这个文件可以为任何有效的文件名。 |
<MyXMLWebService>.disco文件 |
(可选的)作为XML Web服务的发现机制。.disco文件不会自动地为XML Web服务创建。这个文件可以为任何有效的文件名。 |
Web.config文件 |
(可选择的)如果你需要覆盖默认配置设置,你可以包含一个web.config文件。XML Web服务使用这个配置文件来允许系统的定制和可扩展性。例如,如果在系统中你的XML Web服务需要验证而其他的Web应用程序不需要的话,你可以提供一个该XML Web服务特定的web.config文件。 |
\Bin目录 |
包含用于这个XML Web服务的二进制文件。如果你的XML Web服务类和.asmx文件不在同一个目录下,那么包含类的部件必须在\Bin目录中。 |
发现一个XML Web服务 XML Web服务发现是定位和询问XML Web服务描述的过程,这是访问一个XML Web服务的预备步骤。通过发现过程,XML Web服务客户端可以在设计时得知一个XML Web服务存在,它能做什么以及如何适当的与之交互。
可以在XML Web服务发布一个.disco文件时
编程发现,.disco是一个包含与其它发现文档、XSD模式和服务描述连接的XML文档。换句话说,使用ASP.NET创建的XML Web服务自动地有提供一个产生发现文档的能力。当使用带有?DISCO的URL访问时,一个发现文档自动地为XML Web服务生成。例如,如果到一个XML Web服务的URL是www.contoso.com/getquote.asmx,然后自动以www.contoso.com/getquote.asmx?DISCO生成一个发现文档。
为了使能发现一个XML Web服务:
使用你喜欢的编辑器创建一个XML文档,把标记<?xml version="1.0"?>添加到第一行。
在这个XML文档内添加一个<discovery>元素,如:
<disco:discovery xmlns:disco="http://schemas.xmlsoap.org/disco/"> </disco:discovery> |
在<discovery>元素内,添加到服务描述、XSD模式和其他发现文档的引用。
你可以添加对任意你想公开的引用。服务描述引用在一个发现文档中通过使用http://schemas.xmlsoap.org/disco/scl/ XML域名空间添加一个<contractRef>元素来指定。同样地,对其它的发现文档和XSD模式的引用分别通过添加<discoveryRef>和<schemaRef> XML元素来指定。对于XSD模式引用,必须指定XML域名空间http://schemas.xmlsoap.org/disco/schema。。下面的代码示例有对于发现文档、服务描述和一个XSD模式的引用。
<?xml version="1.0"?> <discovery xmlns="http://schemas.xmlsoap.org/disco/"> <discoveryRef ref="/Folder/Default.disco"/> <contractRef ref="http://MyWebServer/UserName.asmx?WSDL" docRef="Service.htm" xmlns="http://schemas.xmlsoap.org/disco/scl/"/> <schemaRef ref="Schema.xsd" xmlns="http://schemas.xmlsoap.org/disco/schema/"/> </discovery> |
引用可以与发现文档存在于的目录有关,就如在discoveryRef元素所示,或与一个URI有关,就如在contractRef元素所示。
通过复制发现文档到Web服务器的一个虚拟目录下,把发现文档部署到这台Web服务器上。
选择性地,如果你想要通过指定一个IIS应用程序而不需要指定一个文档来允许预期消耗者导航到一个URL,那么你可以添加一个到IIS应用程序的默认的页面。这对预期消耗者有益,他们不必知道任意发现文档的名称。用户可以提供想下面发现过程中的URL:
http://MyWebServer/MyWebApplication
如果用于Web应用程序的默认页面是一个HTML页面:
在用于Web服务器的默认Web的页面的<head>标记中添加一个链接到发现文档。例如,如果你命名你的发现文档MyWebService.disco并把它放入与默认页面相同的目录中,你需要放置下面的标记到默认的Web页面中。
<HEAD> <link type='text/xml' rel='alternate' href='MyWebService.disco'/> </HEAD> |
如果用于Web应用程序的默认页面是一个XML文档:
在用于Web服务器的默认Web的页面的<head>标记中添加一个链接到发现文档。例如,如果你命名你的发现文档MyWebService.disco并把它放入与默认页面相同的目录中,你需要放置下面的代码到默认的Web页面的顶端。
<?xml-stylesheet type="text/xml" alternate="yes" href="MyWebService.disco" ?> |
选择性地,如果你使用Visual Studio.NET,你可以开启动态的发现来允许XML Web服务客户端应用程序来在一个没有创建发现文档的Web服务器上发现可用的XML Web服务。当动态发现开启的时候,客户应用程序在Add Web Reference对话框中指定一个引用带有.vsdisco部分的文件的URL,例如www.contoso.com/default.vsdisco,来代替特定的发现文档。
为了开启用于一个Web服务器的动态发现,要修改machine.config来添加下面的<add>元素。
<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> |
注意:当动态发现开启的时候,所有的XML Web服务和存在于Web服务器的发现文档都是可发现的。因此,当开启动态发现时必须小心,因为如果Web服务器不在带有隔火墙的
安全网络中的话,它可能会在无意中暴露敏感数据。
用ASP.NET创建的XML Web服务的配置选择 XML Web服务的配置遵循和所有的ASP.NET Web应用程序使用的相同的范式。ASP.NET配置是一个基于XML的文本文件配置结构,既强大又可扩展。配置文件只是一组XML元素,描述用于Microsoft.NET Framework的特定技术特性的配置选择。就 XML Web服务而言,配置选择是封装在配置文件的webServices XML元素中的。
配置消息传送协议和服务帮助页面 用于XML Web服务消息传送协议和服务帮助页面在配置文件的<webServices>元素下的<protocols> XML元素中配置。通过添加<add>和<remove>元素来进行配置,制定配置文件范围内的那个设置有效。<add>元素明确地添加对配置文件范围内的设置的支持,而<remove>元素移除对更高的配置等级的支持。例如,可以使用Machine.config文件中的<add>元素在机器级别添加一个协议设置,然后使用Web.config文件中的<remove>元素移除对某个Web应用程序的设置。下面的是<add>和<remove>元素的语法:
<{add|remove} name="protocol name" /> |
<add>和<remove>元素的name属性有下列选项:
设置 |
描述 |
HttpSoap |
支持用于XML Web服务的SOAP协议的控件。默认情况下安装已经添加了这个支持。 |
HttpGet |
支持用于XML Web服务的HTTP - GET协议的控件。默认情况下安装不添加这个支持。 |
HttpPost |
支持用于XML Web服务的HTTP - POST协议的控件,不管请求从何起源。默认情况下安装不添加这个支持。 |
HttpPostLocalhost |
当请求来源于本地计算机的时候,支持用于XML Web服务的HTTP - POST协议的控件。如果HttpPost添加到当前配置中,那么这个设置就无效了。默认情况下安装已经添加了这个支持。 |
Documentation |
指定一个服务帮助页面是否显示。默认情况下安装已经添加了这个支持。 |
注意:.NET Framework 1.0版支持HttpSoap、HttpGet、HttpPost和Documentation设置和所有默认的机器级别能够使用的设置。
安全建议 在使用用于XML Web服务的HTTP-GET或HTTP-POST协议之前,你应该知道这样做可能把它暴露给无意的调用。例如,一个未料想到的用户可能接收一个带有XML Web服务链接的电子邮件,点击链接,使用电子邮件中提供的参数调用XML Web服务。你应该在使用HTTP-GET或HTTP-POST协议之前,你应该考虑这种无意中的调用是否有害。
使HTTP-GET和HTTP-POST协议对于整机失效 使用你习惯的文本编辑程序打开Machine.config文件。(Machine.config文件默认的地点在安装目录的\Config子目录下。)
如果webServices部分中有对HTTP-GET和HTTP-POST的支持,那么就把这几行注释掉。在这样做以后,webServices部分应该如下:
<webServices> <protocols> <add name="HttpSoap"/> <!-- <add name="HttpPost"/> --> <!-- <add name="HttpGet"/> --> <add name="Documentation"/> <add name="HttpPostLocalhost"/> </protocols> </webServices> |
保存Machine.config。
在下一次请求这台机器上的XML Web服务的时候,配置的改变将生效。
使用于单独Web应用程序的协议支持失效 使用你习惯的编辑程序打开Web应用程序根目录下的Web.config。(如果无存在Web.config文件,那么就新建一个。)
修改Web.config的webServices部分,明确的移除协议设置。下面的示例明确地移除HTTP- POST和HTTP- GET协议:
<webServices> <protocols> <remove name="HttpPost" /> <remove name="HttpGet" /> </protocols> </webServices> |
保存Web.config。
在下一次请求这个Web应用程序的XML Web服务的时候,配置的改变将生效。
服务帮助页面 在一个Web浏览器中不使用任何参数导航到XML Web服务的URL能让客户查看这个XML Web服务的服务帮助页面,如果这个服务进行了这样的配置。服务帮助页面默认情况下包含关于与XML Web服务通讯的方法以及XML Web服务方法的基本信息。因为服务帮助页面仅仅是一个ASP.NET Web表单,它可以被替换或者被修改成包含类似于公司标识这样的条目。服务帮助页面的文件名在配置文件的<wsdlHelpGenerator>XML元素中指定。服务帮助页面只用来显示有在<protocols> XML元素指定的Documentation协议的配置文件范围内的XML Web服务。默认情况下,Documentation在Machine.config文件中指定。
使服务帮助页面对于一个单独的Web应用程序失效。
使用你习惯的编辑程序打开Web应用程序根目录下的Web.config。(如果无存在Web.config文件,那么就新建一个。)
修改Web.config的webServices部分,明确的移除Documentation协议。
<webServices> <protocols> <remove name="Documentation" /> </protocols> </webServices> |
保存Web.config。
在下一次请求这个Web应用程序的XML Web服务的时候,配置的改变将生效。
注意取消Documentation协议还禁止任何Web应用程序内用于XML Web服务的WSDL文件生成。这防止客户端产生代理类,除非创建一个自定义WSDL文件来为为它们设置。为了在Web应用程序中保留用于XML Web服务的WSDL文件生成,而不提供任何关于XML Web服务的可读的信息,那么你可以添加一个<wsdlHelpGenerator>元素到Web应用程序的Web.config文件中,设置href属性为你创建的一个空白的HTML页面。下面的代码示例是一个Web.config文件的摘录,设置服务帮助页面为MyBlank.htm文件。
<webServices> <wsdlHelpGenerator HREF="docs/MyBlank.asp"/> </webServices> |
原文转自:http://www.ltesting.net
|