创建一个Web服务的过程如下。
创建Web服务
添加Web方法
编译生成Web服务
测试Web方法调用
【例14-1】下面使用VWD 2008创建一个简单的Web服务。
(1) 创建Web服务项目
选择【文件】| 【新建网站】命令,之后在打开的【新建网站】模板中再选择【ASP.NET Web服务】模板,创建一个新的Web服务项目,如图14-2所示。确定已将【位置】设为【文件系统】,将编程语言Visual C#。把网站名称设置为WebServiceSample,单击【确定】按钮。
VWD 2008将生成一个网站。站点中包含两个文件夹(分别为App_Code和App_Data)和一个文件,文件的名称为Service.asmx。.asmx文件包含Web服务的定义。该Web服务的代码是在Service类中定义的,该类存储在App_Code文件夹的Service.cs文件中,【代码和文本编辑器】将显示这个文件。
|
图14-2 选择【新建网站】的【ASP.NET Web服务】模板 |
在【代码和文本编辑器】将显示的文件中,检查一下Service.cs文件,项目模板在该文件中生成了一个派生自System.Web.Services.WebService的Service类。在这个文件中,VWD 2008模板提供了一个名称为HelloWorld的示范性Web服务方法,这个方法简单地返回字符串"HelloWorld"。示例代码说明了Web服务的方法是如何编码的 (它应是公共的),用[WebMethod]属性标记,如下所示:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.Services;
- [WebService(Namespace = "http://tempuri.org/")]
- [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
- // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
- // [System.Web.Script.Services.ScriptService]
- public class Service : System.Web.Services.WebService
- {
- public Service () {
- //如果使用设计的组件,请取消注释以下行
- //InitializeComponent();
- }
- [WebMethod]
- public string HelloWorld() {
- return "Hello World";
- }
- }
在Service类的上方,还可以看到两个属性,[WebService]属性指出了用于标识该Web服务的命名空间。
[WebServiceBinding]属性指定了Web服务遵循的Web服务互操作性等级规范。请修改[WebService]属性的值,示例如下:
- [WebService(Namespace = "http://www.hnyjj.com/webservices")]
- [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
- public class Service : System.Web.Services.WebService
- {
- …
- }
(2) 添加Web方法
可以给Web服务添加一个或多个定制方法。在这里改变HelloWorld方法的代码,让它接受字符串并返回个性化问候。
- [WebMethod]
- public string HelloWorld(string yourName)
- {
- return string.Format("Hello {0}", yourName);
- }
(3) 选择【生成】|【生成网站】命令创建来Web服务。
ASP.NET运行库使用反射技术读取Web服务专用的一些属性,例如[WebMethod],把方法提供为Web服务的操作。ASP.NET运行库还提供了WSDL来描述服务。
要在为Web服务生成的描述信息中唯一地标识XML元素,应添加一个名称空间。这个示例在类Service中用[WebService]属性添加了名称空间http://www.hnyjj.com/ webservices。当然,可以使用其他字符串唯一地标识XML元素,例如,公司页面的URL链接。Web链接不一定存在,它仅用于唯一标识。如果使用基于公司网址的名称空间,就可以确保其他公司不会使用这个名称空间。
如果没有改变XML名称空间,使用的默认名称空间是http://tempuri.org。从学习的角度来看,这个默认的名称空间就已足够了,但不应部署一个使用它的Web服务产品。 |