读书频道 > 网站 > 网页设计 > Web开发学习实录
2.6.1 基础知识——WebMethod属性
13-04-16    奋斗的小年轻
收藏    我要投稿   

本文所属图书 > Web开发学习实录

本书以Web服务技术的原理为主线,详细讲解在.NET平台上的实现方式。内容涵盖Web服务的基础概念、核心组成部分、Web服务的开发、Web服务的应用、Web服务的通信、Web服务的安全性和集成第三方Web服务等。全书概念清...立即去当当网订购

2.6  为Web服务方法添加说明

在上一节中,我们学习了如何对Web服务类进行修饰。在这个Web服务类中会有很多方法,但不是所有的方法都可以通过Web进行调用,而只有使用WebMethod属性修饰的方法才可以。

另外,要成为Web服务方法除了带有WebMethod属性外,还必须声明为public方法。WebMethod属性提供了很多的选项来控制Web服务方法的行为,本节我们就来了解它们。

视频教学:光盘/videos/02/为Web服务方法添加说明实验.avi             长度:10分钟

2.6.1  基础知识——WebMethod属性

WebMethod属性由System.Web.Services.WebMethodAttribute类实现,它包含6个选项来说明和更改Web方法的行为,分别是CacheDuration、Description、EnableSession、MessageName、TransactionOption和BufferResponse。下面通过一些简单的示例介绍这些选项。

1.CacheDuration

在Web服务中实现适当的缓存可以提高可扩展性和性能。实现缓存系统最容易的方法之一是使用WebMethod属性的CacheDuration选项。

使用CacheDuration选项可以设置请求/响应对在缓存中存储的秒数(整数),它的默认值为0,表示不缓存响应。对于涉及需要大量处理器资源的查询或者结果不经常发生变化并且开销较大的其他查询的Web来说,这种缓存机制是非常理想的。例如,在一个商城系统中,获得每个用户订单信息的Web方法就是这种功能的例子。对于这样的系统来说,我们可以将Web方法的CacheDuration属性设置为1分钟或者更长的时间,从而减少到数据库的往返过程。

如下所示代码,演示了如何为一个Web方法添加CacheDuration选项。

[WebMethod(CacheDuration=60)]
public DataSet getOrderDetailsById(string ordId) {
    //这里是具体的实现,此处省略
}

2.EnableSession

ASP.NET Web应用程序最大的优点就是可以禁用会话状态。这一优点也适用于Web服务。默认时,Web服务不支持会话状态。大多数Web服务被设计成与状态无关的,以便实现Internet的可伸缩性,因为处于会话状态时服务器上的每一个客户都会消耗内存。

但是,有时我们可能希望Web服务支持会话状态。我们可以对每一个方法启用会话状态。要想对Web服务方法启用会话状态,可以使用WebMethod属性的EnableSession选项。如下代码演示了获取当前在线用户数量的方法。
[WebMethod(EnableSession=true)]
public int getOnlineUsers() {
    int count;
    if (Session["users"] == null)
    {
        count = 10;
    }
    else
    {
        count = (int)Session["users"] + 100;
    }
    Session["users"] = count;
    return count;
}

这里通过设置EnableSession选项的值为true来启用会话状态。在getOnlineUsers()方法中使用Session对象来获取当前在线用户的数量。

用户在使用ASP.NET测试页从浏览器调用getOnlineUsers()方法时,将会获得希望的结果。每次刷新浏览器时,在线用户数量都会增加,如图2-36所示。


 

3.Description选项和MessageName选项

为了避免用户根据Web服务方法的名称来猜测它的作用,我们可以对每一个Web服务方法提供一个描述。当Web服务包含重载的Web服务方法时,这样做是特别有必要的。

例如,在下面给出的代码中声明了两个名为Calculate的方法,一个接受整型参数,另一个接受单精度浮点型参数。

[WebMethod]
public int Calculate(int x,int y)
{
    return x + y;
}
[WebMethod]
public float Calculate(float x, float y)
{
    return x + y;
}

这段程序中,使用重载的方法创建了两个相同名称的方法Calculate,但是两个方法的参数不同。那么在查看这个页面时会出现运行时异常,如图2-37所示。

如图2-37所示,异常信息中提示同时使用了消息名称Calculate。这种情况下,可以为每个重载的方法使用WebMethod属性。再使用该属性的Description选项为Web服务的方法添加描述信息,使用MessageName选项更改它的名称。如下所示为修改后的代码:

[WebMethod(MessageName="CalculateInt", Description="求两个整数的和")]
public int Calculate(int x,int y)
{
    return x + y;
}
[WebMethod(MessageName = "CalculateFloat", Description = "求两个单精度数的和")]
public float Calculate(float x, float y)
{
    return x + y;
}

然后再打开Web服务的测试页,即可看到修改后的效果如图2-38所示。


 

4.BufferResponse选项

Web方法的默认行为是在内存缓冲区中存储响应,直到将缓冲区填满或者响应完成为止,这个存储过程被称为序列化。在大多数情况下,这种行为是可行的,因为缓冲可以减少客户的传输数量,从而得到更高的性能。

但是,如果Web方法返回大量数据或者用很长时间来运行,那么客户可能想要将BufferResponse选项设置为False,来禁用缓冲。这个设置会将响应立即发送到客户端,但是由于结果集更小,因此这可能会降低性能。

如下代码演示了一个使用BufferResponse选项的例子:
 

[WebMethod(BufferResponse = false)]
public DataSet ExecuteSql(string sql)
{
    //执行数据库查询操作返回所有数据集
}

5.TransactionOption选项

在ASP.NET中页面支持事务处理功能。只需用一个事务处理属性标识ASP.NET页面,该页面中的所有代码就将处于一个事务处理中。

ASP.NET Web服务支持相同的模式。我们可以把Web服务方法标识为支持事务处理功能,然后该方法中的全部代码都将处于一个事务中。

如果要为Web方法设置事务处理支持,可以像下面的示例一样使用WebMethod的TransactionOption选项。

using System.EnterpriseServices;
[WebMethod(TransactionOption=TransactionOption.Required)]
 public UpdateUserAccount(float money)
 {
     //此Web服务方法将支持事务
 }

由于事务处理服务位于System.EnterpriseServices命名空间。因此,在使用时用户首先需要在项目中添加对System.EnterpriseServices.dll文件的引用。

这里TransactionOption选项是一个枚举类型的值,它位于System.EnterpriseServices. TransactionOption命名空间,可选值有5个:Disabled、NotSupported、Required、RequiresNew和Supported。

Web服务不能参与正在进行的事务处理。它通常会启动一个新的事务处理。Web服务与客户机不能共享事务处理的内容。

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站