可以访问ASP.NET Web API站点虚拟目录,但控制器操作返回HTTP 503

Mik*_*fer 6 asp.net roslyn asp.net-web-api

我们未能成功使用Windows服务部署OWIN Web API服务(如此StackOverflow问题中所述).经过多次尝试解决问题后,我们决定简单地创建一个ASP.NET Web API站点并通过IIS进行部署.

在本地运行时,可以访问所有操作.但是,如果我们发布网站(使用Build - > Publish或其任何变体),我们会观察到以下内容:

  1. 当我们浏览到机器名称和端口时,会看到虚拟目录的目录列表.
  2. 当我们请求控制器操作时,站点返回HTTP错误503.该服务不可用.
  3. 没有错误记录到目标服务器上的Windows应用程序事件日志中.
  4. 在托管服务器或客户端计算机上执行请求时也会发生相同的情况.

URL ACL已创建如下:

netsh http add urlacl http://+:8098/api user=Everyone
Run Code Online (Sandbox Code Playgroud)

防火墙似乎没有阻塞端口(我们可以通过上面的步骤1来实现).URL ACL存在,公司中的每个人都可以访问它(他们应该这样做).我们不知道为什么会发生这种情况,似乎无法找到合适的答案.

有人可以建议我们可能忽略的原因或可能的解决方案吗?

UPDATE

从控制器中删除逻辑并重新发布后,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'.    
Run Code Online (Sandbox Code Playgroud)

这是有趣的.看起来Publish没有使用构建版本分发Roslyn编译器.

更新2 控制器上最简单的操作方法是:

[HttpGet]
[Route("Status")]
public string Status()
{
    return "Online";
}
Run Code Online (Sandbox Code Playgroud)

即使手动将Roslyn程序集复制到bin文件夹中的服务器之后,该方法也会返回HTTP 503.应用程序事件日志中不会显示任何错误消息.

当这个方法在本地运行时(在我的机器上),它返回一个JSON字符串,我可以在文本编辑器中打开它.

小智 1

URL ACL 已创建如下:

netsh http 添加 urlacl http://+:8098/api user=Everyone

我遇到了类似的问题,最终删除了 Web 服务器上的 URL ACL 保留。这解决了它。尝试一下。

netsh http 删除 urlacl url= http://+:8098/api