IIS 服务器上的 Web API 内的 Httpclient GetAsync 失败(503 服务不可用)

Posted

技术标签:

【中文标题】IIS 服务器上的 Web API 内的 Httpclient GetAsync 失败(503 服务不可用)【英文标题】:Httpclient GetAsync Fails(503 Service Unavailable) inside Web API on IIS Server 【发布时间】:2016-09-27 12:47:44 【问题描述】:

我有一个简单的 web api,它将检索图像文件并将字节返回给调用者。当我在本地(IIS Express)的visualstudio中托管api项目时它会起作用,但是当我将此项目发布到我的IIS服务器时它会失败。有人有什么想法吗?

[RoutePrefix("api/v1/Test")]
public class TestController : ApiController

    [Route("GetBytesCount")]
    public async Task<int> GetBytesCount()
    
        var client = new HttpClient()  Timeout = new TimeSpan(0, 5, 0) ;
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        var response = await client.GetAsync(@"http://icons.wxug.com/i/c/k/clear.gif");
        response.EnsureSuccessStatusCode();
        var imageBytes = await response.Content.ReadAsByteArrayAsync();
        return imageBytes.Length;
    


如果我从本地盒子里调用它

http://localhost:57988/lkr/api/v1/Test/Getbytescount

它会返回

int xmlns="http://schemas.microsoft.com/2003/10/Serialization/">1689</int>

当我从我的服务器调用它时,它会返回

<Error>
<Message>An error has occurred.</Message>
<ExceptionMessage>
Response status code does not indicate success: 503 (Service Unavailable).
</ExceptionMessage>
<ExceptionType>System.Net.Http.HttpRequestException</ExceptionType>
<StackTrace>
......
</StackTrace>
</Error>

【问题讨论】:

作为不相关的旁注,您应该使用response.Content.ReadAsByteArrayAsync() 请不要删除堆栈跟踪...堆栈跟踪指向您代码中的行号...... @Matias Cicero,我同意,我会更改代码。 服务器的EventLog中有条目吗? @Hackerman 这是行“response.EnsureSuccessStatusCode();”抛出异常。 http状态码是503。 【参考方案1】:

转到项目属性。

获取 SSL URL 并在浏览器中使用以访问资源。

【讨论】:

以上是关于IIS 服务器上的 Web API 内的 Httpclient GetAsync 失败(503 服务不可用)的主要内容,如果未能解决你的问题,请参考以下文章

不允许用于访问此页面的 HTTP 谓词 Web Api IIS 7

发布 Web 服务 - IIS 上的 Web API 2

IIS Web 服务器上的 Youtube 数据 API V3 PHP 无法正常工作

如何让 PUT 和 DELETE 动词与 IIS 上的 Web API 一起使用

在 IIS 7.5 中托管的 Web Api 中找不到 HTTP 404 页面

如何在 IIS 中授予 Web api 应用程序写入权限?