Sql server analysis service 通过IIS连接时的最大连接数问题
做过SSAS项目的大部分人都应该知道SSAS是可以通过在IIS上建立代理站点的方式来建立远程连接的,这样可以绕过连接到SSAS时需要在同一个域环境下通过域用户来验证的问题,这样即使连接到SSAS的客户端应用程序和SSAS服务器不在同一个域下,客户端也可以通过匿名方式连接到SSAS服务器访问多维数据集。但是最近我在开发中遇到一个问题,我开发的客户端应用程序用Adomd.net通过IIS访问SSAS的时候老是报超时错误,错误如下:
开始我一直以为是AdomdConnection或AdomdCommand的timeout时间设置太短了,所以把timeout的时间改长了,但是发现程序还是报上面的超时异常。最后通过查找原因发现这其实和超时没有什么关系,真正原因是:通过IIS代理连接到SSAS时每个客户端的最大连接数默认是4个,如果你开发的客户端程序在同一时间内通过AdomdConnection连接到IIS的连接数超过了4个,那么就会报上面这个异常。而这个最大连接数的设置实际上是可以通过放在IIS代理站点下的msmdpump.ini文件来修改的。
用记事本打开msmdpump.ini文件,将<MaxThreadsPerClient>这个XML节点加入到该文件中(msmdpump.ini文件中默认是没有这个XML节点的,不懂的人根本不知道还有这个设置,真是坑啊。。。)并设置值为一个较大的值,这里我设置成了10000,就表示一个客户端的应用程序可以同时启动10000个连接通过IIS代理访问SSAS(如果客户端程序是ASP.NET应用程序,那就是指ASP.NET所在的进程<一般来说也是一个IIS进程>,可以同时向SSAS服务器端的IIS代理申请10000个连接来访问SSAS)。
这里我将msmdpump.ini的所有配置节点及其默认值都在下面列出来,方便查阅:
<ConfigurationSettings> <ServerName>localhost</ServerName> <SessionTimeout>3600</SessionTimeout> <ConnectionPoolSize>100</ConnectionPoolSize> <MinThreadPoolSize>0</MinThreadPoolSize> <MaxThreadPoolSize>0</MaxThreadPoolSize> <MaxThreadsPerClient>4</MaxThreadsPerClient> </ConfigurationSettings>