在任何人感到困惑之前,这是针对 IIS Express ,而不是IIS。
我们有一个需要SSL客户端证书身份验证的MVC5应用程序。在开发中,它在Azure模拟器中运行,在VS2013中以管理员权限(对于端口80/443)运行。
当我们在VS2013(F5)中启动应用程序时,它在Azure模拟器中运行它,但它会立即抛出HTTP错误500.19 - 内部服务器错误及其详细信息
此配置部分不能在此路径中使用。有时候是这样的 当该部分被锁定在父级别时。锁定是通过 default(overrideModeDefault =“Deny”),或由位置明确设置 tag with overrideMode =“Deny”或legacy allowOverride =“false”。
配置源是我们的MVC5应用程序的web.config,位于以下行:
<security>
<access sslFlags="SslNegotiateCert" />
</security>
有趣的是,我已将c:\users\<my_username>\Documents\IISExpress\Config\applicationhost.config
设置为
<section name="access" overrideModeDefault="Allow" />
关于此问题的文档不多,但无论我们从谷歌那里得到什么,都表明对于常规的IIS Express,这应该足够了。我怀疑在Azure模拟器+ Admin管理员权限内运行IIS Express会破坏某些功能但无法诊断它。
有没有人知道如何让这个工作?
答案 0 :(得分:4)
好的,所以this question and it's answer帮了很多忙。怀疑,c:\users\<my_username>\Documents\IISExpress\Config\applicationhost.config
似乎并不重要,因为Azure Emulator似乎产生了另一个不关心该文件的IIS Express实例。
正确的方法似乎是通过AppCmd.exe“解锁”该设置,因此解决方案如下:
在Azure Cloud Service中添加启动任务。
<Webrole> ... </WebRole>
<Startup> <Task commandLine="UnlockSslSettingsSection.cmd" executionContext="elevated" taskType="simple" /> </Startup>
将UnlockSslSettingsSection.cmd
文件添加到解决方案的项目中,然后添加以下两行(两行都很重要,不要重构)。
IF NOT DEFINED APPCMD SET APPCMD=%SystemRoot%\system32\inetsrv\AppCmd.exe %APPCMD% unlock config /section:system.webServer/security/access
在解决方案资源管理器中,转到项目,右键单击UnlockSslSettingsSection.cmd
=&gt; properties =&gt;将“复制到输出目录”设置为“始终复制”