ASP.NET Web服务 - 基于验证限制一些并发实例

时间:2009-10-19 20:11:49

标签: asp.net web-services

我有一个在Web服务器上运行的asp.net Web服务,其中包含一个Web方法(wm) 做一些基于参数(param)的处理。

我想在某些情况下限制对此Web方法的并发调用 - 即何时 client1传递的参数值等于client2传递的参数。

我正在考虑在wm的开头添加一些验证,以便在处理开始之前检查条件。

我的问题是:

  1. 如何从我的Web方法中找出是否有另一个Web服务实例调用正在执行的相同Web方法。
  2. 如何在Web服务运行的各个并发实例中访问传递给我的webmethod的参数。
  3. 我想避免数据库日志记录,因为如果服务器出现故障,日志可能不会更新(除非有一种很好的方法来处理这种可能性)

1 个答案:

答案 0 :(得分:0)

恕我直言网络服务应该无国籍,你必须避免做这类事情。否则从我的头部(未测试):

[WebMethod]
public void SomeMethod(string p)
{
    var cache = HttpContext.Current.Cache;
    // Be careful with the equality comparison here
    // it might not work with complex types
    if (cache["param"] == p)
    {
        throw new Exception("Another client has called this method with same argument");
    }
    cache["param"] = p;
    try
    {
        // Execute your method here
    }
    finally
    {
        cache.Remove("param");
    }
}