部署一个XML Web服务包括复制
asmx文件和任何XML Web服务使用的汇编文件
而不要把Microsoft
NET Framework的一部分作为Web服务器上的虚拟目录
有关如何部署一个XML Web服务的信息
请参见
部署XML Web服务
XML Web服务对使用发现机制的用户适用
用户可以浏览一个特殊的发现文件或Web服务器的根来定位发现文件
从这些文件中
他们可以判断那些服务对他们来说有用
部署XML Web服务
部署一个XML Web服务包括把asmx文件和任何XML Web服务使用的汇编文件而不是MicrosoftNET Framework的一部分复制到Web服务器上
例如假设你把一个XML Web服务命名为StockServices为了部署XML Web服务你需要在你的Web服务器上创建一个虚拟目录和把XML Web服务的asmx文件放入这个目录这个虚拟目录还应该是一个IIS Web应用程序虽然它不是必需的一个典型的部署将有下面的目录结构
\Inetpub
\Wwwroot
\StockServices
StockServicesasmx
\Bin
你的XML Web服务使用的汇编不是MicrosoftNET Framework一部分的
XML Web服务发布的条目
当你发布一个XML Web服务时下列条目用来部署一个Web服务器
条目描述Web应用程序目录作为你的XML Web服务的根目录所有的文件都存放在这个目录中这个目录应该被标记为一个IIS Web应用程序所用<MyXMLWebService>asmx 文件调用XML Web服务的客户端的基本URL这个文件可以为任何有效的文件名<MyXMLWebService>disco文件(可选的)作为XML Web服务的发现机制disco文件不会自动地为XML Web服务创建这个文件可以为任何有效的文件名nfig文件 (可选择的)如果你需要覆盖默认配置设置你可以包含一个nfig文件XML Web服务使用这个配置文件来允许系统的定制和可扩展性例如如果在系统中你的XML Web服务需要验证而其他的Web应用程序不需要的话你可以提供一个该XML Web服务特定的nfig文件\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文档换句话说使用ASPNET创建的XML Web服务自动地有提供一个产生发现文档的能力当使用带有?DISCO的URL访问时一个发现文档自动地为XML Web服务生成例如如果到一个XML Web服务的URL是/getquoteasmx然后自动以/getquoteasmx?DISCO生成一个发现文档
为了使能发现一个XML Web服务
使用你喜欢的编辑器创建一个XML文档把标记<?xml version=?>添加到第一行
在这个XML文档内添加一个<discovery>元素如:
<disco:discovery xmlns:disco=>
</disco:discovery>
在<discovery>元素内添加到服务描述XSD模式和其他发现文档的引用
你可以添加对任意你想公开的引用服务描述引用在一个发现文档中通过使用 XML域名空间添加一个<contractRef>元素来指定同样地对其它的发现文档和XSD模式的引用分别通过添加<discoveryRef>和<schemaRef> XML元素来指定对于XSD模式引用必须指定XML域名空间下面的代码示例有对于发现文档服务描述和一个XSD模式的引用
<?xml version=?>
<discovery xmlns=>
<discoveryRef ref=/Folder/Defaultdisco/>
<contractRef ref=
docRef=
xmlns=/>
<schemaRef ref=Schemaxsd
xmlns=/>
</discovery>
引用可以与发现文档存在于的目录有关就如在discoveryRef元素所示或与一个URI有关就如在contractRef元素所示
通过复制发现文档到Web服务器的一个虚拟目录下把发现文档部署到这台Web服务器上
选择性地如果你想要通过指定一个IIS应用程序而不需要指定一个文档来允许预期消耗者导航到一个URL那么你可以添加一个到IIS应用程序的默认的页面这对预期消耗者有益他们不必知道任意发现文档的名称用户可以提供想下面发现过程中的URL/MyWebServer/MyWebApplication
如果用于Web应用程序的默认页面是一个HTML页面:
在用于Web服务器的默认Web的页面的<head>标记中添加一个链接到发现文档。tw.WIngWit.cOm例如,如果你命名你的发现文档MyWebService.disco并把它放入与默认页面相同的目录中,你需要放置下面的标记到默认的Web页面中。
<HEAD>
<link type='text/xml' rel='alternate' />
</HEAD>
如果用于Web应用程序的默认页面是一个XML文档:
在用于Web服务器的默认Web的页面的<head>标记中添加一个链接到发现文档。例如,如果你命名你的发现文档MyWebService.disco并把它放入与默认页面相同的目录中,你需要放置下面的代码到默认的Web页面的顶端。
<?xml-stylesheet type="text/xml" alternate="yes" ?>
选择性地,如果你使用Visual Studio.NET,你可以开启动态的发现来允许XML Web服务客户端应用程序来在一个没有创建发现文档的Web服务器上发现可用的XML Web服务。当动态发现开启的时候,客户应用程序在Add Web Reference对话框中指定一个引用带有.vsdisco部分的文件的URL,例如/default.vsdisco,来代替特定的发现文档。
为了开启用于一个Web服务器的动态发现,要修改nfig来添加下面的<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>元素移除对更高的配置等级的支持。例如,可以使用nfig文件中的<add>元素在机器级别添加一个协议设置,然后使用nfig文件中的<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协议对于整机失效
使用你习惯的文本编辑程序打开nfig文件。(nfig文件默认的地点在安装目录的\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>
保存nfig。
在下一次请求这台机器上的XML Web服务的时候,配置的改变将生效。
使用于单独Web应用程序的协议支持失效
使用你习惯的编辑程序打开Web应用程序根目录下的nfig。(如果无存在nfig文件,那么就新建一个。)
修改nfig的webServices部分,明确的移除协议设置。下面的示例明确地移除HTTP- POST和HTTP- GET协议:
<webServices>
<protocols>
<remove name="HttpPost" />
<remove name="HttpGet" />
</protocols>
</webServices>
保存nfig。
在下一次请求这个Web应用程序的XML Web服务的时候,配置的改变将生效。
服务帮助页面
在一个Web浏览器中不使用任何参数导航到XML Web服务的URL能让客户查看这个XML Web服务的服务帮助页面,如果这个服务进行了这样的配置。服务帮助页面默认情况下包含关于与XML Web服务通讯的方法以及XML Web服务方法的基本信息。因为服务帮助页面仅仅是一个ASP.NET Web表单,它可以被替换或者被修改成包含类似于公司标识这样的条目。服务帮助页面的文件名在配置文件的<wsdlHelpGenerator>XML元素中指定。服务帮助页面只用来显示有在<protocols> XML元素指定的Documentation协议的配置文件范围内的XML Web服务。默认情况下,Documentation在nfig文件中指定。
使服务帮助页面对于一个单独的Web应用程序失效。
使用你习惯的编辑程序打开Web应用程序根目录下的nfig。(如果无存在nfig文件,那么就新建一个。)
修改nfig的webServices部分,明确的移除Documentation协议。
<webServices>
<protocols>
<remove name="Documentation" />
</protocols>
</webServices>
保存nfig。
在下一次请求这个Web应用程序的XML Web服务的时候,配置的改变将生效。
注意取消Documentation协议还禁止任何Web应用程序内用于XML Web服务的WSDL文件生成。这防止客户端产生代理类,除非创建一个自定义WSDL文件来为为它们设置。为了在Web应用程序中保留用于XML Web服务的WSDL文件生成,而不提供任何关于XML Web服务的可读的信息,那么你可以添加一个<wsdlHelpGenerator>元素到Web应用程序的nfig文件中,设置href属性为你创建的一个空白的HTML页面。下面的代码示例是一个nfig文件的摘录,设置服务帮助页面为文件。
<webServices>
<wsdlHelpGenerator HREF="docs/MyBlank.asp"/>
</webServices>