Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >IIS中.NET核心应用超时对第三方API的请求

IIS中.NET核心应用超时对第三方API的请求
EN

Stack Overflow用户
提问于 2021-03-09 06:51:39
回答 2查看 552关注 0票数 0

我有一个应用程序,可以接收和响应请求,但是它需要向第三方.NET (Twilio)发出请求。这些请求在本地托管时成功,但在IIS中托管时会超时。

.NET Core应用程序的目标是v2.1,运行在Windows和IIS7上。我按照这篇文章中的指导原则为站点设置了一个专用应用程序池。

应用程序池设置:

我正在使用邮递员向应用程序发出GET和POST请求。

获得并发布对测试控制器的请求,工作正常。我对这些测试端点所做的就是返回接收到的参数。

代码语言:javascript
运行
AI代码解释
复制
[Route("api/[controller]")]
[ApiController]
public class TestController : ControllerBase
{
    [HttpGet]
    public string Get(int id)
    {
        return $"response to GET; id:{id}";
    }

    [HttpPost]
    public string Post([FromBody] int id)
    {
        return $"response to POST; foo:{id}";
    }
}

上述端点在VS2019中使用IISExpress在本地运行调试模式,并且在部署到web服务器并与IIS7一起托管时也可以工作。

当我试图调用第三方API (Twilio)时,麻烦就开始了。同样,当应用程序在本地运行时,这些调用也会成功。几乎刻不容缓。我将发送到SMSController的post端点,请求将被触发,并在几秒钟内收到一条文本消息。但是,来自web服务器和IIS的GET和POST请求到这些端点失败。

代码语言:javascript
运行
AI代码解释
复制
[Route("api/[controller]")]
[ApiController]
public class SMSController : ControllerBase
{
    private string twilioSID = "xxxxxx";
    private string twilioAuthToken = "xxxxxx";
    private string twilioPhoneNumber = "+15555555555";

    [HttpGet]
    public string Get(string phoneNumber)
    {
        TwilioClient.Init(twilioSID, twilioAuthToken);

        var message = MessageResource.Create(
            body: $"TEST message via Twilio",
            from: new Twilio.Types.PhoneNumber(twilioPhoneNumber),
            to: new Twilio.Types.PhoneNumber(phoneNumber)
        );

        return message.Status.ToString();
    }

    [HttpPost]
    public string Post([FromBody] GeoEvent geoEvent)
    {
        TwilioClient.Init(twilioSID, twilioAuthToken);

        var message = MessageResource.Create(
            body: $"TEST message via Twilio",
            from: new Twilio.Types.PhoneNumber(twilioPhoneNumber),
            to: new Twilio.Types.PhoneNumber(geoEvent.PhoneNumber)
        );

        return message.Status.ToString();
    }
}

在IIS中托管时,获取并将请求发送到上述端点,得到500个响应。引发以下异常:

System.Net.Http.HttpRequestException:连接尝试失败是因为连接方在一段时间后没有正确响应,或者已建立的连接失败是因为连接主机没有响应--> System.Net.Sockets.SocketException:连接尝试失败是因为连接方在一段时间后没有正确响应,或者建立连接失败是因为连接主机没有响应。

最后,下面是SDK在VS2019中发布应用程序时为我生成的VS2019。

代码语言:javascript
运行
AI代码解释
复制
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath=".\TwilioService.exe" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
    </system.webServer>
  </location>
</configuration>

我的本地机器和运行IIS的web服务器都不是公司代理的背后。

是否缺少允许IIS通过web.config向第三方提出请求的IIS或web.config设置?

更新:我现在已经在运行Windows 2016的另一个web服务器上复制了相同的问题。这台机器是用.NET 5、IIS10和.NET 5托管包安装的。我还安装了VS2019并重新创建了web项目,以便在服务器上本地运行。以下是研究结果:

  • 在IIS Express中本地运行的api控制器可以成功地向Twilio发出请求并获得响应。SMS消息被成功发送。没有错误。
  • 在IIS 10中本地运行的api控制器调用Twilio,但无法得到响应。发生下列错误:

Twilio.Exceptions.ApiConnectionException:连接错误: POSThttps://api.twilio.com/2010-04-01/Accounts//Messages.json --> System.Net.Http.HttpRequestException:连接尝试失败是因为连接方在一段时间后没有正确响应,或者建立的连接失败是因为连接主机没有响应。(api.twilio.com:443)

重申一下,上述两种方案都运行在同一台机器上。唯一的区别是IIS Express与IIS 10。这是SSL证书问题吗?由于IIS 10作为.NET核心应用的反向代理,通过IIS从.net核心应用程序获得识别或转发证书是否会出现问题?

EN

回答 2

Stack Overflow用户

发布于 2021-03-11 00:17:20

尝试从您的计算机命令提示符中选择第三方服务URL。

确保防火墙端口设置为允许。检查防病毒现在正在阻止连接。

尝试将defaultProxy部分添加到我的web.config中,以便让我的网站连接到web服务。

https://learn.microsoft.com/en-US/troubleshoot/dotnet/framework/cannot-consume-web-service-via-http-proxy

票数 0
EN

Stack Overflow用户

发布于 2021-03-17 04:27:07

解决了,最终被证明是公司的代理人。我有坏消息说,web服务器不是在代理后面,而是在代理后面。Twilio在他们的文档中为这个确切的场景提供了一个解决方案,包括使用自定义的代理rest客户端类。它是System.Net.HttpClient的包装器。该服务现在可以通过代理调用Twilio,使用这个类和代理服务器url集合。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66549188

复制
相关文章
2.2 Git 基础 - 记录每次更新到仓库
现在我们手上有了一个真实项目的 Git 仓库,并从这个仓库中取出了所有文件的工作拷贝。 接下来,对这些文件做些修改,在完成了一个阶段的目标之后,提交本次更新到仓库。
shaonbean
2019/05/26
6480
Themeleaf通过ajax局部更新
需求:通过改变id,从数据库中回显不同的信息 前端: <div class="row"> <div class="col-sm-6"> <div class="form-group"> <label class="col-sm-4 control-label">单号:</label> <div class="col-sm-8"> //onchange:修改option改变触发函数 <select id="tes
Zero_xxl
2020/08/06
1.2K0
WordPress 如何禁用更新检测和自动更新功能
每次打开后台,WordPress会启动更新检测和自动更新功能,检查程序、主题和插件是否有新版本,但国内一直无法顺畅的连接 WordPress 更新服务器,可能这就是经常有人说WordPress慢的原因了,这个锅不在WordPress。
主机教程网2bcd.com
2022/10/14
7580
WordPress 如何禁用更新检测和自动更新功能
ESP8266使用AJAX实现动态更新网页
在许多物联网应用中,有些情况下需要连续监控传感器数据,而最简单的方法是通过使用ESP8266 Web服务器来提供HTML网页服务。但是这种方法的问题在于,必须以特定的时间间隔刷新Web浏览器才能获取更新的传感器数据。这不仅效率低下,而且需要很多时钟周期才能执行其他任务。该问题的解决方案称为“Asynchronous JavaScript and XML ”或简称AJAX。使用AJAX技术,我们可以监视实时数据而无需刷新整个网页,这不仅节省了时间,而且还节省了宝贵的时钟周期。通过本文,您将学习如何在ESP8266上实现基于AJAX的网络服务器。 什么是AJAX?
怪兽
2022/10/04
2.9K0
ESP8266使用AJAX实现动态更新网页
Git 系列教程(5)- 记录每次更新到仓库
可以用 git status 命令查看哪些文件处于什么状态。 如果在克隆仓库后立即使用此命令,会看到类似这样的输出:
小菠萝测试笔记
2021/05/18
6550
Git 系列教程(5)- 记录每次更新到仓库
前端如何实现自动检测更新?
用户在访问单页面网站时,如果生产环境已经发布了新的版本(有功能上的变化),由于单页面中路由特性或浏览器缓存的原因,并不会重新加载前端资源,此时用户浏览器所并非加载是最新的代码,从而可能遇到一些 bug。
唐志远
2023/08/17
1.2K0
前端如何实现自动检测更新?
检测数组更新
因为Vue是响应式的,所以当数据发生变化时,Vue会自动检测数据变化,视图会发生对应的更新。
Qwe7
2022/05/27
4090
如何检测一个元素是否在 vector 中
可以使用头文件 <algorithm> 里的方法 std::find, #include <algorithm> #include <vector> vector<int> vec; if (std::find(vec.begin(), vec.end(), item) != vec.end()) do_this(); else do_that();
ClearSeve
2022/02/10
1.9K0
Ajax使用
var path = "{%#path%}";//当前路径(公司写法) var url = path + "?xmls=xmls/news.xmls&method=fangansxx";//URL路径
小语雀网
2022/05/06
6940
Ajax:初次认识ajax,ajax使用方法
我们来个简单的测试,使用最原始的HttpServletResponse处理 , .最简单 , 最通用
冷环渊
2021/10/19
5.9K0
网站检测更新提示
系统新功能上线后需要提示用户刷一下页面才能体验,下面介绍一种纯前端的简单实现方式。
薛定喵君
2023/05/13
9120
laravel 中如何使用ajax和vue总结
最近写一个项目是基于laravel框架的,这个框架传言是为艺术而创作的优雅框架,简洁分明的风格,很吸引我,所以最近研究比较多。本次就是基于该框架然后将Vue插件加入实现一定的功能,vue插件本身强大,具体不说了,有兴趣的同学可以去官网
用户8449980
2021/07/13
2K0
SpringMVC—Ajax使用
Ajax的核心是XMLHttpRequest对象(XHR){内置对象},XHR为服务器发送请求和解析服务器响应提供了接口,能够以异步方式从服务器获取新数据
Java架构师必看
2021/05/14
1.7K0
SpringMVC—Ajax使用
使用jQuery的.on方法解决ajax增加的html元素获取不到的问题
下班之前终于搞定了使用$.ajax增加的动态元素获取不到的问题,原来是使用.on方法(老版本是.live),这里记录一下,顺便赞一下jQuery,通过使用getJSON,.append,.empty等,这个东东太方便了。唯一的一点就是版本太多了,最新版本支持的浏览器对于中国用户来说是个噩梦。
崔文远TroyCui
2019/02/26
1.8K0
【Ajax】如何通过axios发起Ajax请求
✍️ 作者简介: 前端新手学习中。 💂 作者主页: 作者主页查看更多前端教学 🎓 专栏分享:css重难点教学 Node.js教学 从头开始学习 ajax学习 文章目录 axios   什么是axios   axios发起GET请求   axios发起POST请求   直接使用axios发起get请求   直接使用axios发起post请求 axios   什么是axios Axios是专注于网络数据请求的库,相比于原生的XMLHttpRequest对象,axios简单易用。相比于
坚毅的小解同志的前端社区
2022/11/28
1.7K0
【Ajax】如何通过axios发起Ajax请求
如何使用 Debian backports 更新源
Backport的含义是”向后移植”,就是将软件新版本的某些功能移植到旧版本上来,这就称为backport。
Debian中国
2018/12/20
7.3K0
ajax使用案例
想要这个服务器的地址,使用network->XHR 它是XMLHttpRequest 。
全栈程序员站长
2022/09/06
11.7K0
ajax使用案例
Ajax的使用
纯JS原生实现Ajax我们不去讲解这里,直接使用jquery提供的,方便学习和使用,避免重复造轮子,有兴趣的同学可以去了解下JS原生XMLHttpRequest !
Rochester
2020/09/01
1.6K0
在 JS 中如何使用 Ajax 来进行请求
github 地址:https://github.com/qq44924588...
前端小智@大迁世界
2020/12/07
9.1K0
如何避免 IDEA 每次重启都index
在 IntelliJ IDEA 中,可以通过以下几个步骤来避免每次重启时索引: 打开 File -> Settings 菜单。在左侧的菜单栏中选择 “Appearance & Behavior” -> “System Settings” -> “Synchronization”。
JavaEdge
2023/04/26
4.2K0
如何避免 IDEA 每次重启都index

相似问题

使用AJAX在每次点击时更新信息

36

使用AJAX更新多个元素

11

AJAX -元素更新

10

使用Ajax更新双重html元素

10

如何在每次更新状态时呈现元素

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档