【问题标题】:WebApplication works fine on IIS Express but it doesn't on Local IISWebApplication 在 IIS Express 上运行良好,但在本地 IIS 上却不行
【发布时间】:2015-06-27 20:22:39
【问题描述】:

我的网络应用程序有问题。我使用 VS 2013(以管理员身份运行)和 Windows 8 进行开发。

当我使用 IIS Express 进行调试时 - 一切正常,没有任何错误(我以管理员身份运行 VS)。当我更改项目属性以使用本地 IIS(已安装)时 - 我无法使用放置在 GAC 中的外部库(Microsoft.FlightSimulator.SimConnect)。我也以管理员身份运行 VS。 抛出的错误:“HRESULT E_FAIL 已从对 COM 组件的调用中返回”——这对我没有任何意义。这是在创建新的 SimConnect 对象时抛出的:
var simconnect = new SimConnect(...)
OFC,要使用 SimConnect,首先应该启动 Microsoft Flight Simulator(并且它已经启动)。这是我在互联网上发现的问题的建议原因 - 第二个是授予权限(如下所述)。

详情: 我在解决方案中有两个项目:库项目(用于连接到 FSX)和 Web 项目(MVC - 呈现结果)。
1) 我试图将整个库项目内容移动到 MVC 项目 - 没有。
2) 我使用 IIS 管理器发布我的网站(使用单独的 AppPool) - 结果与本地 IIS 相同。
3) 我为我自己的 AppPool 以及 IUSR、IIS_IUSR 和 DefaultAppPool 授予了文件夹(放置项目的位置)的权限 - 完全访问权限。没事了。
4)我以管理员身份运行 FSX - 也没有:/

我找到了解决方法:我将库项目移动到另一个项目 - 我使用 HttpSelfHostConfiguration 托管它的控制台应用程序。后来,我从主项目(MVC)中调用了这个 api。对于此解决方案,一切正常(我测试了本地 IIS [调试] 以及 IIS 管理器)。我只需要以管理员身份运行 Host Api 项目。

我很好奇异常的原因是什么。另外:如何解决这个问题:)

这似乎是权限的问题 - 但我授予了每个使用过的 AppPool。
可能是GAC中缺少dll权限的原因吗?我不这么认为,但我不知道该怎么做。如果是,如何在 GAC 中授予 dll 权限(或如何复制)?

【问题讨论】:

  • Web 应用程序是否在完全信任下运行?
  • 所以你的应用需要飞行模拟器才能运行?当使用像 IIS Express 这样的用户模式进程时,这可能会起作用,但是当没有人登录时,你要确保它在运行。从基于 IIS 的应用程序中依赖 GUI 进程不是一个好主意,并且可能无法正常工作。
  • @Proxytype 我已经添加:<securityPolicy> <trustLevel name="Full" policyFile="internal"/> </securityPolicy> 根据这个(你的意思是那个吗?):msdn.microsoft.com/en-us/library/wyts434y(v=vs.140).aspx 本地 IIS 仍然没有:/
  • @PeterHahndorf 是的,我的应用程序需要 FSX 才能运行。我的目的是创建一个应用程序来在网站上展示当前的航班 - 一个人在 FSX(苍蝇)中播放,其他人在网站上(例如在电话上)观看他的航班(在同一网络中)。网站在 FSX 所在的同一台计算机上运行。我找到了上面问题中提到的唯一解决方案,但我很好奇:我可以在没有单独的主机应用程序的情况下解决这个问题吗(它正在工作,我对此很满意:))?或者也许我应该选择不同的方式在网络中显示带有航班数据的视图?
  • @这是您的特殊要求,我从未遇到过。如果它适用于 IIS Express,为什么不直接使用它。我认为可以将其提供给远程机器。

标签: c# asp.net-mvc iis dll iis-express


【解决方案1】:

@Krzyrok,最近在我使用外部库的一个项目中遇到了同样的问题。在无休止的面包屑之后,我得到了解决。将您的应用程序池标识从“ApplicationPoolIdentity”更改为“LocalSystem”。我还将站点匿名身份验证从指定的 IUSR 更改为“应用程序池身份”,但对其进行了测试,它可以留在 IUSR 上。我还授予了 IUSR 和 IIS_IUSR 文件夹的权限。

【讨论】:

    【解决方案2】:

    如果有人遇到此问题,则问题可能是您没有为 localhost 站点配置 SSL。该站点可能正在尝试通过 https 端口 443 进行通信,但在那里找不到该站点。该站点只能托管在不安全的 http 端口上。为了解决这个问题,

    1. 转到 IIS 管理器
    2. 在网站上单击鼠标右键
    3. 点击右侧的绑定
    4. 点击添加
    5. 选择 https
    6. 选择 IIS Express 证书
    7. 点击确定

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-22
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多