在使用VS2012和Team时,使用IIS Express SSL遇到问题

20

问题:

ADFS2 要求 RP Trust 使用 https。RP Trust 是 https://localhost:44310/PAWS/。因此,我需要在本地使用 SSL,让 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,同时打开配置为使用https的IIS Express的MVC4项目解决方案。现在,VS2012将无法加载该项目,并抱怨没有安全绑定。

我做错了什么或者如何修复这个问题,以便于获取我项目的最新版本后能够直接运行它?


1
我们的团队也遇到了同样的问题。可能有点跑题,但我想知道升级到VS 2013是否可以解决它?有人能发表评论吗? - BlakeH
10个回答

10

我最近遇到了这个问题,我已经确定了它发生的原因。

Visual Studio使用项目URL设置来设置IIS Express HTTP绑定,然后查看IISExpressSSLPort设置以设置HTTPS绑定。

但是,如果您已将项目URL更改为HTTPS地址,则Visual Studio会感到困惑。为了更新IIS Express绑定,它假定您输入了HTTP地址作为项目URL,并且似乎无法处理其中存在HTTPS地址的情况。

这使事情变得复杂了,因为我发现将项目URL更改为HTTPS地址是使Visual Studio默认启动调试HTTPS URL的唯一方法。

因此,这似乎是Visual Studio处理IIS Express绑定更新时出现的问题。我不知道是否有一个良好的解决方法,可以让自动绑定更新并加载具有HTTPS地址的URL进行调试。


我同意。这也是我的第一反应。 - Jaguir
考虑到这是一个错误,应该将其标记为答案。如果我找到解决方法,我会分享的。 - Jaguir
1
最终,我只是在#if !DEBUG中包装了我的 Filters.Add(new RequireHttpsAttribute());。我在本地不真正需要SSL。 - Jaguir
我可以在开发过程中模拟身份验证,但我希望它实际上在开发过程中使用ADFS。而ADFS要求依赖方使用https。 - Evan Larsen

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中创建/修改之前。
希望这有所帮助...

3

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

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


我正在使用VS2015,遇到了同样的问题。Kevin Stricker的答案解决了我的问题。 - Andre Soares

1
你尝试以管理员身份打开项目了吗(以管理员身份运行VS2012)?
通常当你遇到上述错误(配置Web xxx为ASP.NET 4.5失败...)和(创建虚拟目录xxx失败)时,是因为Visual Studio没有足够的权限。
也许不是你的问题,但尝试一下也无妨。

是的,我已经尝试过了。VS2012要求您以管理员身份打开项目才能创建站点。但由于某种原因,VS2012不会自动创建HTTPS绑定。这就是我希望有人能向我展示如何做到这一点的原因。 - Evan Larsen

1
首先,感谢您提供在本地机器上重现此问题的步骤。其他团队成员也遇到了这个问题,但由于我创建了该项目,所以没有遇到这个问题。这让我有机会尝试一些不同的解决方案。
我发现在当前环境中(没有来自MS的修复),最好将项目URL保留为http值,但将起始URL更改为https值。大多数开发人员应该可以在VS中轻松更改它。
这适用于新机器,无需运行批处理文件来配置https站点。您在IIS Express中有两个绑定(http和https),但除此之外,它似乎运行得足够良好。

1

您需要在项目属性列表中将SSL启用设置为True,才能使该绑定自动显示。(来自Scott Hanselman的建议)

As seen in Visual Studio 2010


1
尝试过了。该项目仍无法在其他团队成员的机器上加载。 - Evan Larsen

0

你尝试过在.csproj文件中手动配置端口吗?一旦你在那里配置好了,它应该会传递到其他工作站:

<IISExpressSSLPort>44310</IISExpressSSLPort>

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

0

我看到有两个选项:

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

    或者

  • 将您项目的用户文件添加到源代码控制。

    任何一种方法都可以让用户获取最新版本并无问题地运行。


0
我最近遇到了一个非常类似的问题,并在尝试解决时发现了这篇文章。我注意到的一件事是,如果在applicationhost.config文件中设置了多个站点使用HTTPS绑定,那么IIS Express似乎会变得非常困扰。
在我的情况下,我设置了2个站点使用相同的SSL绑定到端口44300,更改其中一个站点上的一个SSL绑定的端口号会导致类似于OP中的错误。最终我不得不删除其中一个站点,这并不理想。
经过进一步的挖掘,我尝试将“要求SSL”属性从“true”切换到“false”,然后再切换回“true”。这触发了对applicationhost.config的更新,创建了一个新的SSL绑定和一个新的端口号。
我陷入了这个混乱的境地,因为我复制了一个现有的项目,我的配置试图在2个站点之间共享端口。

0

我最近在使用VS 2019和IIS Express时遇到了一个非常相似的问题。我试图将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绑定,用于https协议的新端口号。因此,我修改了所有链接,使用建议的新端口号(在项目的Web属性、配置文件和ADFS配置中),现在它可以正常工作了。 结论是,对于同一站点,http端口不必与https端口相同。


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