在Azure Web角色上更新aspnet.config

6
我有一个SignalR解决方案,部署在Azure Web Role(云服务而非Azure网站)。为了确保我们能够最大化每个实例的连接数,我需要根据本文所述的各种ASP.NET设置进行一些更改:http://www.asp.net/signalr/overview/performance/signalr-performance#tuning appConcurrentRequestLimit和requestQueueLimit设置可以轻松通过启动任务使用APPCMD进行更改。然而,maxConcurrentRequestsPerCPU设置位于aspnet.config文件中,无法通过相同的机制进行更改。
我尝试���用启动任务直接更新该文件(现在只是基本的文件替换),但似乎在启动任务完成后被Azure运行时替换,所以更改会丢失。我可以远程桌面连接到计算机并手动进行更改,因此我已经看到它起作用,但这对于我们期望随需求扩展和缩小的服务来说是不可持续的。
欢迎提供在Azure环境中如何更改此设置的任何想法!

1
也许你可以使用ServerManager类并修改配置。不过我还没有开始尝试。 - sharptooth
只是另一次瞎猜:尝试从RoleEntryPoint类的OnStart替换该文件——在Web角色中,我们也可以像在Worker角色中一样拥有RoleEntryPoint实现。它的实例将存在于Web角色上的WaIISHost.exe进程中。这个进程总是存在的。并且OnStart将仅在所有IIS更改完成且站点准备好运行后才会被调用。 - astaykov
谢谢你们两位,我会尝试一下这些方法。我在 Twitter 上也收到了一个建议,将在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET{version} 中添加一个名为 MaxConcurrentRequestsPerCPU 的注册表 DWORD。 - Ben
你尝试过使用PowerShell替换值并进行部署吗? - Maria Ines Parnisari
1
"appConcurrentRequestLimit和requestQueueLimit设置可以轻松更改" - appcmd set config /section:system.webserver/serverRuntime /appConcurrentRequestLimit:100000appcmd set config /section:processModel /autoConfig:false /commit:MACHINEappcmd set config /section:processModel /requestQueueLimit:250000 /commit:MACHINE - Dunc
1个回答

6
我最终采用了以下基于注册表的方法,它允许我在不使用aspnet.config的情况下更改maxConcurrentRequestsPerCPU设置。
我向现有的startup.cmd文件中添加了以下REG命令行实用程序的使用(已用于调用APPCMD更改其他设置):
REG ADD HKLM\SOFTWARE\Microsoft\ASP.NET\4.0.30319.0 /v MaxConcurrentRequestsPerCPU /t REG_DWORD /d 10000
REG ADD HKLM\SOFTWARE\Wow6432Node\Microsoft\ASP.NET\4.0.30319.0 /v MaxConcurrentRequestsPerCPU /t REG_DWORD /d 10000

这将配置32位和64位应用程序池,尽管在这种情况下我只需要64位。


2
如果您正在使用启动任务,请不要忘记在末尾加上/f,否则它会在第二次等待输入。 - Dunc
注册表更改是否会覆盖aspnet.config XML文件? - SomeGuyOnAComputer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接