4.线程模型
  在前面的接口说明中我们提到过 GetActiveServices( ) 函数,该函数返回的是当前工作进程中已经开启的报表服务线程数量。在通常情况下,我们都要求保持单线程运行:
..
if(dll.GetActiveServices( ) > 0) {
 Response.Write("服务器忙,请稍后再试");
 Response.End();
 return;
}
..
  如果您将这段判断语句删除或注释掉,相当于就允许多线程工作了,也即允许同时启动多个报表服务,您会发现服务仍然能运行,貌似挺正常。
  但是实际上还是有问题的,我们程序内部为了保证系统的稳定性,对调用 func 函数的这一过程实行了线程堵塞:同一时刻只允许一个线程工作访问 func 函数,待 func 返回,再允许其它线程调用 func,原理图如下:
  您看出问题来了吗?简单举个例子吧,假如同时有5个登录用户打开了报表服务,如果第一个用户访问的func函数碰巧很费时,那么其它4个用户也得老老实实地排队等待着。

  如果您希望这5个用户都能各自独立、互不影响地访问报表服务,请使用下面的“进程模型”。



  5.进程模型
  要彻底让每个登录用户都互不牵制、独立工作,请在IIS中将应用程序池配置成一个Web园(Web Garden),即允许多进程工作,以提高报表服务的并发吞吐量.
  配置方法很简单,在 IIS 的“应用程序池”中,找到硕正服务所在的程序池(如果不存在就创建一个),在“高级设置”中,将最大工作进程数从默认的“1”改成多个:
  例如设成“5”,就表示同时能容纳5个并发用户工作,这一点我们已经实际验证过。
  设成Web园还有一个好处: 万一某个进程崩溃,也不影响其它访问者。