如何限制同时请求WebSevice中某个方法的连接数

Msenk 2010-07-22 04:52:06
在vs.net中做了个webservice,其中有一个方法是返回数据库的查询结果,防止数据库压力过大,默认并发数据为n,允许n人同时并发查询该接口,这个在代码中应该怎么写?
...全文
124 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jt6 2010-07-22
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20100722/16/e15df01e-cd7e-4313-8277-235cf8ef2593.html 的5楼。

bancxc 2010-07-22
  • 打赏
  • 举报
回复
数据库应该可以自己设置连接数吧
vip__888 2010-07-22
  • 打赏
  • 举报
回复
静态变量
static int counts=0;
在方法体内 每执行一次
counts++;
执行结束 counts--;
然后你自己判断执行的连接数目
Sunpire 2010-07-22
  • 打赏
  • 举报
回复
注意这样仅是限制 “防止数据库压力过大”,而不是防止 WebService 本身被并发请求.
Sunpire 2010-07-22
  • 打赏
  • 举报
回复
不知道 WebService 本身有没有关于并发请求的设置,如果能设置最好啦。

假设不能设置,要满足LZ的“防止数据库压力过大”,应还是有办法的,

定义一个 static 变量或属性 CurrentCount ,记录当前调用该 WebService方法 的连接数,

private static int CurrentCount {get;set;}
private static object syncRoot = new Object();

WebService方法体内:
private bool canAccessDb = false;
while (!canAccessDb)
{
if (CurrentCount < n)
{
lock (syncRoot)
{
if (CurrentCount < n)
{
CurrentCount++;
canAccessDb = true;
}
}
if( canAccessDb )
{
查询数据库的操作;
CurrentCount --;
return;
}
}
else
{
Thread.Sleep(100);
}
}


如果代码逻辑上没有漏洞的话,对 Webservice 方法大于n的并发请求(如请求数为m),n个请求被允许并发访问数据库, m-n 个在 Sleep() ,并且不是排队 Sleep() ,很有可能再有新的请求时,新的请求反而先得到了数据库访问权。 而且,这里还没有考虑 WebService 最大允许的连接超时时间。

仅供参考。

12,165

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 Web Services
社区管理员
  • Web Services社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧