我的 Web 应用程序有问题。我使用 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(并且已经启动)。这是我在 Internet 上发现的问题的建议原因 - 第二个是授予权限(如下所述)。
详细信息:
我在解决方案中有两个项目:库项目(用于连接到 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 权限(或如何复制)?
最佳答案
@Krzyrok,最近在我使用外部库的项目之一中遇到了同样的问题。在跟随无尽的面包屑之后,我解决了它。将您的应用程序池标识从“ApplicationPoolIdentity”更改为“LocalSystem”。我还将站点匿名身份验证从指定的 IUSR 更改为“应用程序池身份”,但对其进行了测试,它可以留在 IUSR 上。我还授予了 IUSR 和 IIS_IUSR 文件夹的权限。
关于c# - WebApplication 在 IIS Express 上运行良好,但在本地 IIS 上运行不正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31093152/