您的第一个 C# Web 服务






4.61/5 (204投票s)
编写您的第一个 WebService 的简介。
引言
创建你的第一个 Web 服务非常简单。事实上,通过使用 Visual Studio.NET 中的向导,你可以在几分钟内让你的第一个服务启动并运行,而且无需编写任何代码。
在这个例子中,我在本地机器的 /WebServices 目录下创建了一个名为 MyService
的服务。文件将创建在 /WebServices/MyService 目录下。
将定义一个名为 MyService
的新命名空间,在这个命名空间内将有一组类来定义你的 Web 服务。默认情况下,将创建以下类:
Global (在 global.asax 中) | 继承自 HttpApplication。这个文件是 ASP.NET 中标准 ASP global.asa 文件的等效文件。 |
WebService1 (在 WebService1.cs 中) | 继承自 System.Web.Services.WebService 。这是你的 WebService 类,它允许你公开可以作为 WebService 被调用的方法。 |
此外,还会创建许多文件:
AssemblyInfo.cs | 包含程序集的版本和配置信息。 |
web.config | 定义应用程序的运行方式(调试选项、cookie 的使用等)。 |
MyService.disco | 服务的发现信息。 |
WebService1.asmx | 你的 WebService URL。在浏览器中导航到此文件,你将看到一个用户友好的页面,显示可用的方法、所需的参数和返回值。甚至还提供了表单,允许你通过网页测试服务。 |
bin\MyService.dll | 实际的 WebService 组件。在生成服务时创建。 |
默认创建的用于服务的类(在此例中)名为 WebService1
,它位于 MyService
命名空间内。代码部分显示如下:
namespace MyService
{
...
/// <summary>
/// Summary description for WebService1.
/// </summary>
[WebService(Namespace="http://codeproject.com/webservices/",
Description="This is a demonstration WebService.")]
public class WebService1 : System.Web.Services.WebService
{
public WebService1()
{
//CODEGEN: This call is required by the ASP+ Web Services Designer
InitializeComponent();
}
...
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
}
}
会生成一个默认的 HelloWorld
方法,但被注释掉了。只需取消注释并生成项目。瞧!你就拥有了一个可以工作的 WebService。
WebService 应与命名空间相关联。你的向导生成的服务将具有命名空间 http://tempuri.org。如果你按原样编译并运行服务,你将收到一条冗长的消息,提示你应该选择一个新的命名空间,因此我们添加命名空间和 WebService 描述,如下所示:
[WebService(Namespace="http://codeproject.com/webservices/",
Description="This is a demonstration WebService.")]
public class WebService1 : System.Web.Services.WebService
{
...
要测试服务,你可以右键单击 Visual Studio 中解决方案资源管理器里的 WebService1.asmx,然后选择“在浏览器中查看”。测试页面如下所示:

调用此方法将返回以下内容:

运行演示应用程序
如果你下载了本文的源代码,那么你需要在你的网站的根目录下创建一个名为 'WebServices' 的目录,并将下载的 zip 文件解压到其中。然后你应该会看到:
\WebServices
\WebServices\bin
\WebServices\WebService1.asmx
...
导航到 https:///WebServices/WebService1.asmx 可能不会显示 WebService,因为你需要确保 WebService 的程序集位于应用程序的 /bin 目录下。你还会发现你无法加载解决方案文件 MyService.sln。为了“一石二鸟”,你需要启动 IIS 管理控制台,打开你的网站条目,右键单击 WebServices 文件夹,然后单击 属性。单击“创建”按钮创建一个新应用程序,然后按 OK。/WebServices 目录现在是一个应用程序,因此 .NET 框架将从 /WebServices/bin 目录加载 WebService 程序集,并且你将能够加载和生成 MyService.sln 解决方案。
扩展示例
所以我们有了一个 WebService。不算太令人兴奋,但我们确实毫不费力地完成了。为了让事情稍微有趣一点,我们将定义一个返回自定义结构数组的方法。
在 MyService
命名空间内,我们将定义一个名为 ClientData
的结构:
public struct ClientData
{
public String Name;
public int ID;
}
然后定义一个新的方法 GetClientData
。注意方法前面使用了 WebMethod
属性。这指定了该方法可作为 WebService 方法访问。
[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 页面,我们将看到一个表单,允许我们输入参数值。输入非整数值将导致类型错误,输入不在 1-10 范围内的值将返回一个空数组。但是,如果我们成功地获得了正确的输入参数,我们将看到以下 XML 文件:

就是这么简单。
缓存 WebServices
通常,WebService 在多次调用时会返回相同的结果,因此缓存信息以加快速度是有意义的。在 ASP.NET 中,只需将 CacheDuration
属性添加到你的 WebMethod 即可轻松完成:
[WebMethod(CacheDuration = 30)]
public ClientData[] GetClientData(int Number)
{
CacheDuration 属性指定了方法应缓存结果的时间长度(以秒为单位)。在此期间,所有来自 WebMethod 的响应都将相同。
你也可以使用类中的常量成员变量来指定 CacheDuration
:
private const int CacheTime = 30; // seconds
[WebMethod(CacheDuration = CacheTime)]
public ClientData[] GetClientData(int Number)
{
为你的 WebMethods 添加描述
在浏览 .asmx 文件时创建的默认 WebMethods 列表中,最好附带每个方法的描述。Description
属性实现了这一点。
[WebMethod(CacheDuration = 30,
Description="Returns an array of Clients.")]
public ClientData[] GetClientData(int Number)
{
你的默认 .asmx 页面将如下所示:
还有其他 WebMethod 属性可以控制缓冲、会话状态和事务支持。
部署 WebService
现在我们有了一个 WebService,让别人能够使用它(你可能会觉得我疯了,但……)将 WebService 发布到你的服务器需要正确部署你的解决方案。在 Visual Studio 的“生成”菜单中有一个“部署”选项,首次选择该选项时,它会启动一个向导,允许你向解决方案添加部署项目。这将创建一个安装包,你可以在服务器上运行该包,它将创建必要的目录、设置正确的参数并复制必要的文件。
这并不能真正让你了解到底发生了什么,所以我们将手动部署我们的 MyService
。
部署应用程序是使用 运行演示应用程序 中的步骤完成的。我们需要为我们的服务创建一个目录(或使用现有目录)来存放 .asmx 文件,并且我们需要将服务的程序集放在应用程序的 bin/ 目录中。你可以将 .asmx 文件放在网站的子目录中,并将程序集放在网站根目录的 /bin 文件夹中,或者将 /bin 放在包含 .asmx 文件的子目录中,并将该目录标记为应用程序(参见 上方)。
如果你选择创建一个单独的目录并将其标记为应用程序,那么在此目录中你需要添加以下文件和目录:
MyService.asmx | 此文件充当你的服务的 URL。 |
MyService.disco | 服务的发现文档。 |
web.config | 服务配置文件,用于覆盖默认的 Web 设置(可选)。 |
/bin | 此目录包含你的服务的程序集。 |
/bin/MyService.dll | 实际的服务程序集。 |
结论
编写 WebServices 非常简单。使用 Visual Studio.NET 的向导,编写和部署这些服务就像点击一下一样简单,但即使你想手动完成,涉及的步骤也极其简单。