ASP.NET Web API 站点虚拟目录可访问,但控制器操作 return HTTP 503
ASP.NET Web API site virtual directory is accessible, but controller actions return HTTP 503
我们未能成功使用 Windows 服务(如 this Whosebug question 中所述)部署 OWIN Web API 服务。在多次尝试解决问题后,我们决定简单地创建一个 ASP.NET Web API 站点并通过 IIS 部署它。
当 运行 在本地时,所有操作都可以访问。但是,如果我们发布站点(使用构建 -> 发布或其任何变体),我们会观察到以下内容:
- 当我们浏览到机器名称和端口时,我们会看到虚拟目录的目录列表。
- 当我们请求控制器操作时,站点 returns HTTP 错误 503。服务不可用。
- 目标服务器上的 Windows 应用程序事件日志中未记录任何错误。
- 在托管服务器或客户端计算机上执行请求时也会发生同样的情况。
已创建 URL ACL,如下所示:
netsh http add urlacl http://+:8098/api user=Everyone
防火墙似乎没有阻止端口(因为我们可以通过上面的第 1 步找到它)。 URL ACL 存在,公司中的每个人都可以访问它(他们应该)。我们不知道为什么会这样,似乎找不到合适的答案。
有人可以提出我们可能忽略的原因或可能的解决方案吗?
更新
从控制器中删除逻辑并重新发布后,Windows 应用程序事件日志中出现以下(缩写)警告信息:
Event code: 3005
Event message: An unhandled exception has occurred.
Exception information:
Exception type: HttpException
Exception message: Could not find a part of the path 'D:\websites\LoggingWebApi\bin\roslyn\csc.exe'.
这很有趣。 Publish 似乎没有随构建分发 Roslyn 编译器。
更新 2
控制器上最简单的动作方法是这样的:
[HttpGet]
[Route("Status")]
public string Status()
{
return "Online";
}
即使在手动将 Roslyn 程序集复制到 bin 文件夹中的服务器之后,该方法 returns HTTP 503。应用程序事件日志中没有出现错误消息。
当此方法 运行 在本地(在我的机器上)时,它 returns 我可以在文本编辑器中打开的 JSON 字符串。
The URL ACL has been created as follows:
netsh http add urlacl http://+:8098/api user=Everyone
我遇到了类似的问题,最终删除了 Web 服务器上的 URL ACL 保留。那修好了。试一试。
netsh http delete urlacl url=http://+:8098/api
我们未能成功使用 Windows 服务(如 this Whosebug question 中所述)部署 OWIN Web API 服务。在多次尝试解决问题后,我们决定简单地创建一个 ASP.NET Web API 站点并通过 IIS 部署它。
当 运行 在本地时,所有操作都可以访问。但是,如果我们发布站点(使用构建 -> 发布或其任何变体),我们会观察到以下内容:
- 当我们浏览到机器名称和端口时,我们会看到虚拟目录的目录列表。
- 当我们请求控制器操作时,站点 returns HTTP 错误 503。服务不可用。
- 目标服务器上的 Windows 应用程序事件日志中未记录任何错误。
- 在托管服务器或客户端计算机上执行请求时也会发生同样的情况。
已创建 URL ACL,如下所示:
netsh http add urlacl http://+:8098/api user=Everyone
防火墙似乎没有阻止端口(因为我们可以通过上面的第 1 步找到它)。 URL ACL 存在,公司中的每个人都可以访问它(他们应该)。我们不知道为什么会这样,似乎找不到合适的答案。
有人可以提出我们可能忽略的原因或可能的解决方案吗?
更新
从控制器中删除逻辑并重新发布后,Windows 应用程序事件日志中出现以下(缩写)警告信息:
Event code: 3005
Event message: An unhandled exception has occurred.
Exception information:
Exception type: HttpException
Exception message: Could not find a part of the path 'D:\websites\LoggingWebApi\bin\roslyn\csc.exe'.
这很有趣。 Publish 似乎没有随构建分发 Roslyn 编译器。
更新 2 控制器上最简单的动作方法是这样的:
[HttpGet]
[Route("Status")]
public string Status()
{
return "Online";
}
即使在手动将 Roslyn 程序集复制到 bin 文件夹中的服务器之后,该方法 returns HTTP 503。应用程序事件日志中没有出现错误消息。
当此方法 运行 在本地(在我的机器上)时,它 returns 我可以在文本编辑器中打开的 JSON 字符串。
The URL ACL has been created as follows:
netsh http add urlacl http://+:8098/api user=Everyone
我遇到了类似的问题,最终删除了 Web 服务器上的 URL ACL 保留。那修好了。试一试。
netsh http delete urlacl url=http://+:8098/api