代码之家  ›  专栏  ›  技术社区  ›  Mike Hofer

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

  •  6
  • Mike Hofer  · 技术社区  · 8 年前

    我们未能使用Windows服务(如中所述)部署OWIN Web API服务 this StackOverflow question

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

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

    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文件夹中的服务器,该方法也会返回HTTP 503。应用程序事件日志中不显示任何错误消息。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Ingram Marray    8 年前

    URL ACL创建如下:

    netsh http添加urlacl http://+:8098/api 用户=所有人

    我也遇到了类似的问题,最终删除了web服务器上的URL ACL保留。这就解决了问题。试试看。

    netsh http删除urlacl url=