帮酷LOGO
  • 显示原文与译文双语对照的内容

介绍

创建你的第一个web服务非常简单。 实际上,使用 Visual Studio 中的向导, 你可以在几分钟内启动并运行第一个NET服务。

对于本例,我在本地机器的/WebServices 目录中创建了一个名为 MyService的服务。 这些文件将在/WebServices/MyService 目录中创建。

将定义 new 名称空间,命名为 MyService,在此命名空间中将是一组定义你的Web服务的类。 默认情况下,将创建以下类:

全局( 在 global.asax 中)从HttpApplication派生。这里文件是标准 ASP global.asa 文件的ASP.NET 等效项。
web service1 ( 在 WebService1.cs 中)System.Web.Services.WebService 派生。这是你的web服务类,它允许你公开可以被称为web服务的方法。

还创建了许多文件:

AssemblyInfo.cs包含程序集的版本和配置信息。
web.config定义应用程序运行( 调试选项,使用 Cookies 等)的方式。
MyService.disco服务的发现信息。
WebService1.asmx你的web服务 URL 。导航到浏览器中的这个文件,你将返回一个显示可用的方法。所需的参数和返回值的。 甚至提供了表单,允许你通过网页测试服务。
binMyService.dll实际的web service组件。创建服务时创建这里组件。

默认情况下创建的服务的类称为( 在这种情况下) WebService1,它位于 MyService 命名空间中。 代码部分显示在下面。

namespace MyService
{
. . .
 ///<summary>/// Summary description for WebService1.///</summary> [WebService(Namespace="http://codeproject.com/webservices/",
 Description="This is a demonstration WebService.")]
 publicclass WebService1 : System.Web.Services.WebService
 {
 public WebService1()
 {
 //CODEGEN: This call is required by the ASP+ Web Services Designer InitializeComponent();
 }
. . .
 [WebMethod]
 publicstring HelloWorld()
 {
 return"Hello World";
 }
 }
}

生成了一个默认方法 HelloWorld 并将它的注释出来。 简单取消注释并生成项目。 嘿,你有一个步行的web服务。

web service应与命名空间相关联。 如果你编译并运行服务 as-is,你的Wizard-generated服务将具有名称空间 http://tempuri.org. 。你将得到一条长消息,指示你应该选择一个 new 命名空间,因此,我们将添加名称空间,如下所示:

[__b__][WebService(Namespace="http://codeproject.com/webservices/",
 Description="This is a demonstration WebService.")]publicclass WebService1 : System.Web.Services.WebService
{
. . .

要测试服务,你可以在 Visual Studio 中的解决方案资源管理器中右键单击 WebService1.asmx 并选择"在浏览器中查看"。 测试页面如下所示

当调用这里选项时,将返回以下内容:

正在运行演示应用程序

如果你下载了本文的源代码,那么你需要在站点目录的web root 中创建一个目录'web webservices',并将下载的zip文件解压到。 然后你应该拥有:

WebServices
WebServicesbin
WebServicesWebService1.asmx
...

导航到 http://localhost/WebServices/WebService1.asmx 将不会向你显示web服务,因为你需要确保 web service的程序集位于应用程序目录的/bin 中。 你还会发现,你不能加载解决方案文件 MyService.sln. 杀死两个鸟,你需要启动IIS管理控制台,打开你的网站,右键单击 web services文件夹,然后单击属性。 点击'创建'按钮创建一个 new 应用程序。 现在/WebServices 目录是一个应用程序,因此. NET 框架将从/WebServices/bin 目录加载web服务程序集,你将能够加载和构建 MyService.sln 解决方案。

扩展示例

所以我们有一个web服务。 这并不令人兴奋,但是我们又没有 taxed 。 为了让事情变得更有趣,我们将定义一个方法来返回一个定制结构数组。

MyService 命名空间中,我们将定义一个名为 ClientData的结构:

publicstruct ClientData
{
 publicString Name;
 publicint ID;
}

然后定义 new 方法 GetClientData 。 注意在方法前面使用 WebMethod 属性。 这里方法指定该方法可以作为web服务方法访问。

[WebMethod]public ClientData[] GetClientData(int Number)
{
 ClientData [] Clients = null;
 if (Number >0 && Number <= 10)
 {
 Clients = new ClientData[Number];
 for (int i = 0; i < Number; i++)
 {
 Clients[i].Name = "Client" + i.ToString();
 Clients[i].ID = i;
 }
 }
 return Clients;
}

如果我们编译,那么导航到. asmx 页面,然后我们会显示一个表单,让我们为参数输入一个值。 输入non-integer值将导致 type-error,并且输入不在范围 1 -10中的值将返回空数组。 但是,如果我们设法获得输入参数正确,我们将显示以下 XML file:

那很简单。

缓存 web service

通常,web服务在多次调用时会返回相同的结果,因此缓存信息以提高速度是有意义的。 在 ASP.NET 中这么做就像向 web method添加一个 CacheDuration 属性一样简单:

[__b__][WebMethod(CacheDuration = 30)]public ClientData[] GetClientData(int Number)
{

CacheDuration属性指定方法缓存结果的时间长度( 以秒为单位) 。 在那个时间内,来自 web method的所有响应都是相同的。

还可以在类中使用常量成员变量指定 CacheDuration:

privateconstint CacheTime = 30; // seconds[WebMethod(CacheDuration = CacheTime)]public ClientData[] GetClientData(int Number)
{

向你的WebMethods添加描述

在浏览到. asmx 文件时创建的WebMethods的默认 List 中,对已经发布的每个方法进行描述是很好的。 Description 属性完成这里操作。

[WebMethod(CacheDuration = 30,
 [__b__]Description="Returns an array of Clients.")]public ClientData[] GetClientData(int Number)
{

你的默认. asmx 页面将如下所示:

还有其他的web method属性来控制缓冲。会话状态和事务。

部署web服务

既然我们有了一个web服务,那么允许别人使用它是不错的。 在服务器上发布web服务需要正确部署解决方案。 在 Visual Studio的构建菜单上是一个"部署"选项,该选项在第一次选中时启动一个向导,允许你将部署项目添加到。 这将创建一个安装包,你可以在服务器上运行该安装包,该包将创建必要的目录,设置正确的参数。

这并不真正让你了解到底发生了什么,因此我们将手动部署 MyService

使用 ) 作为一个应用程序。

如果选择创建单独的目录并将它的标记为应用程序,则需要在这里目录中添加以下文件和目录:

MyService.asmx这里文件用作你的服务的URL
MyService.disco你的服务的发现文档
web.config替代默认网站设置( 可选)的服务的配置文件。
/bin这里目录保存服务的程序集
/bin/MyService.dll实际的服务 asembly 。

结束语

编写 web WebServices非常简单。 使用 Visual Studio 。NET向导使编写和部署这些服务成为一个点并单击事务,但即使你希望手工完成这些步骤,也非常简单。




Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语