在VS2012和团队中使用IIS Express SSL时遇到问题

时间:2012-11-14 20:00:25

标签: https visual-studio-2012 iis-express

问题:

ADFS2 要求RP Trust使用https。 RP信任为https://localhost:44310/PAWS/。话虽如此,我需要让IIS Express在本地使用SSL。因此,当我配置 ASP.NET MVC4 项目以使用IIS Express时。 mvc4 project configuration

当我将此检查到TFS(源代码管理)并且团队中的另一个开发人员获取最新信息时。该项目不会为他们加载。

MVC4 project wont load

打开解决方案时,Visual Studio 2012将显示以下错误消息: VS2012 error 1 VS2012 error 2

这是因为IIS Express不会自动读取项目文件并将HTTPS绑定添加到站点配置。 这是VS添加到IIS Express的applicationhost.config文件

的配置
<site name="PAWS.Web-Site" id="2">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="C:\Users\larsene\Documents\My Web Sites\PAWS.Web-Site14" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:44310:localhost" />
    </bindings>
</site>

但我需要它将绑定协议设置为HTTPS,如下所示:

<binding protocol="https" bindingInformation="*:44310:localhost" />

我可以手动将其输入applicationhost.config。或者我可以像这样运行appcmd.exe来配置它。

"%ProgramFiles(x86)%\IIS Express\appcmd.exe" set site /site.name:PAWS.Web-Site /bindings:https/*:44310:localhost

但是这两种方法中的任何一种都不是我想要的。我不想向每个在这个项目上工作的开发人员解释他们在加载项目之前必须手动编辑他们的IIS Express设置。

如何重新创建问题:

首先关闭VS2012可轻松重新创建。然后删除位于

中的IIS Express的配置文件夹
%USERPROFILE%\Documents\IISExpress

然后打开VS2012并打开MVC4项目的解决方案,该项目配置为使用带有https的IIS Express。现在,VS2012将无法加载项目并抱怨没有安全绑定。

我做错了什么,或者我该如何解决这个问题,以便获得最新项目的人能够运行它?

10 个答案:

答案 0 :(得分:10)

我最近遇到过同样的问题,我已经能够确定它为什么会发生。

Visual Studio使用Project Url设置来设置IIS Express http绑定,然后查看IISExpressSSLPort设置以设置https绑定。

但是,如果您已将Project Url更改为https地址,那么Visual Studio就会混淆。出于IIS Express绑定更新的目的,它假定您已输入Project Url的http地址,并且似乎无法处理存在的https地址。

这使事情变得复杂,因为将Project Url更改为https地址是我发现默认情况下使Visual Studio开始调试https url的唯一方法。

因此,这似乎是Visual Studio处理IIS Express绑定更新的一个问题。我不知道一个好的解决方法,它允许自动绑定更新,并开始调试加载的https地址。

答案 1 :(得分:3)

这看起来可能是VS2012中的一个错误...... 我能够处理此问题的唯一方法是手动编辑IISExpress配置文件:applicationhost.config,位于C:\ Users \ YOUR_USER_NAME \ Documents \ IISExpress \ config下。然后在'sites'下我修改了特定应用程序网站的块:

    <site name="YourSite" id="1">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
                <virtualDirectory path="/" physicalPath="c:\..." />
            </application>
            <bindings>
                <binding protocol="https" bindingInformation="*:YOUR_PORT_#:localhost" />
            </bindings>
    </site>

将“绑定协议”更改为“https”,并确保以管理员权限启动Visual Studio 2012,至少在IIS Express中创建/修改站点之前。

希望这会有所帮助......

答案 2 :(得分:3)

我可以确认Visual Studio 2013没有这个问题。

从VS2012升级到2013解决了我的问题。

答案 3 :(得分:1)

您需要在项目的属性列表中set SSL Enabled to True才能自动显示该绑定。 (按照Scott Hanselman的说法)

As seen in Visual Studio 2010

答案 4 :(得分:1)

您是否尝试以管理员身份打开项目(以管理员身份运行VS2012)?

通常当你遇到上述错误时(为ASP.NET 4.5配置web xxx失败...)和(创建虚拟目录xxx失败)是因为visual studio没有足够的权限。

可能不是你的问题,但尝试没有坏处。

答案 5 :(得分:1)

首先,感谢您提供在本地计算机上重现此步骤的步骤。其他团队成员遇到了这个问题,但自从我创建项目以来,我没有遇到过这个问题。这让我有机会尝试一些不同的解决方案。

我发现在当前环境中效果最好(MS没有修复)是将项目URL保留为http值,但将起始URL更改为https值。大多数开发人员应该在VS中改变它。

这适用于新计算机,无需运行bat文件的人来配置https站点。您在IIS Express中有两个绑定(http和https),但除此之外,它似乎运行良好。

答案 6 :(得分:0)

您是否尝试过手动配置.csproj文件中的端口?一旦你在那里配置它,它应该转移到其他工作站:

<IISExpressSSLPort>44310</IISExpressSSLPort>

此外,即使选中“将服务器设置应用于所有用户”选项,项目的用户文件仍可能导致问题。我通常在修复IIS Express的SSL问题时删除用户文件,因为在我修复问题后重新配置用户设置要容易得多。

答案 7 :(得分:0)

我最近遇到了一个非常类似的问题,在尝试解决时遇到了这个帖子。 我注意到的一件事是,如果在applicationhost.config文件中使用HTTPS绑定设置了多个站点,IIS Express似乎会非常痛苦。

在我的情况下,我设置了两个站点以使用相同的SSL绑定到端口44300,更改其中一个站点上的一个SSL绑定上的端口号导致类似于OP中的错误。我最终不得不删除其中一个网站,这是不理想的。

经过一番挖掘后,我尝试将“需要SSL”属性true切换为false,然后返回true。这触发了对applicationhost.config的更新,后者使用新的端口号创建了新的SSL绑定。

我遇到了这个烂摊子,因为我复制了一个现有的项目,我的配置试图在2个站点之间共享端口。

答案 8 :(得分:0)

我看到两个选项:

  • 启用将服务器设置应用于所有用户(存储在项目中) Web选项卡上的文件)选项将绑定配置移动到您的 项目文件。

  • 将项目的用户文件添加到源代码管理中。

    这两种方法都可以让用户获得最新版本并且无问题地运行。

答案 9 :(得分:0)

我最近在VS 2019和IIS Epress中遇到了一个非常相似的问题。我试图将http更改为https,以便可以使用ADFS。 Ce site est inaccessible localhost n'autorise pas la connexion.

经过更多研究,我尝试将“ Require SSL”属性从true切换为false,然后再切换回true。这触发了对applicationhost.config文件(...。Vs \ ProjectName \ config \ applicationhost.config)的更新,该文件创建了一个具有SSL协议新端口号的新SSL绑定。因此,我用建议的新端口(在项目的Web属性,配置文件和ADFS配置中)修改了所有链接,并且它可以正常工作。 结论,对于同一站点,http端口不必与https相同。