从 C# 调用 WebApi 获取异常 HttpRequestException

Posted

技术标签:

【中文标题】从 C# 调用 WebApi 获取异常 HttpRequestException【英文标题】:Calling WebApi from C# getting exception HttpRequestException 【发布时间】:2015-09-23 05:19:17 【问题描述】:

以下代码是托管在 IIS 上的简单 ASP.NET 网站。当我从本地机器运行网站时,它对 environmentName(UAT 和 SYSTEM)都适用。但是当托管在 IIS 上时,在为 SYSTEM 环境调用 WebApi 时出现错误,并且 UAT 工作正常。

        string uri = string.Empty;
        StringBuilder sbResult = new StringBuilder();
        string message = string.Empty;

        try
        
            using (HttpClient client = new HttpClient())
            
                if (environmentName.ToLower().Contains("system"))
                    uri = "http://172.26.25.53:5453/"; // SYS
                else
                    uri = "http://172.26.129.21:5453/"; // UAT

                client.BaseAddress = new Uri(uri);

                var response = client.GetAsync("api/AppFabric").Result;

                if (response.IsSuccessStatusCode)
                

                
            
        

当我为 environmentName "UAT" 运行此代码时,它运行良好。但是当环境名称为“SYSTEM”时,我得到如下异常

System.AggregateException:发生一个或多个错误。 ---> System.Net.Http.HttpRequestException:发送时出错 请求。 ---> System.Net.WebException: 无法连接到 远程服务器---> System.Net.Sockets.SocketException:一个连接 尝试失败,因为连接方没有正确响应 一段时间后,或建立连接失败,因为 连接的主机未能响应 172.26.25.53:5453 at System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult) 在 System.Net.ServicePoint.ConnectSocketInternal(布尔连接失败, Socket s4, Socket s6, Socket&socket, IPAddress&地址, ConnectSocketState 状态、IAsyncResult asyncResult、Exception& 例外)

请帮忙,我是 WebApi 的新手。有没有我错过了什么。我以相同的方式在两个环境中托管了 WebApi。

【问题讨论】:

是否有防火墙阻止站点以限制访问?这可能会影响您的反应。 尝试从HttpRequestException 中检查InnerException,你会得到。它可以为您提供更详细的信息。 但是我可以从本地机器 Visual Studio 运行代码,但是当我将它托管在其他服务器的 IIS 上(但与 WebAPI 服务器相同的域)时,我得到了异常。我还在托管服务器上运行了 SYSTEM 环境的 WebApi,它运行良好。因此,如果防火墙是我应该在哪个服务器上看到的问题,托管 IIS 服务器或 WebApi 服务器。抱歉我太天真了,但我才刚刚开始做这一切。感谢您的回复。 5453端口是由visual studio分配的吗? IIS正常运行在80端口,可以试试用“172.26.25.53”访问吗? 没有我在 IIS 中分配的端口,因为端口 80 已被其他网站占用。 【参考方案1】:

我发现这是一个超时问题。 为了解决这个问题,我增加了 IIS 中的连接时间。 在 IIS 中,我转到默认网站,右键单击 --> 管理网站 --> 高级设置 --> 连接限制(扩展) --> 将默认值从 120 更改为(比如说)180。

【讨论】:

以上是关于从 C# 调用 WebApi 获取异常 HttpRequestException的主要内容,如果未能解决你的问题,请参考以下文章

C# - 调用异常时如何获取类名和行号

C#进阶系列——WebApi 异常处理解决方案

WebApi中,怎么获取接口调用者的外网ip地址

WebApi中,怎么获取接口调用者的外网ip地址

C#进阶系列——WebApi 异常处理解决方案

从 c# 捕获本机异常并在它离开范围后获取 exception.what()