gpt4 book ai didi

c# - 为什么 HttpWebRequest.GetResponse() 在 IIS 下的 ASP.NET 页面中失败?

转载 作者:太空宇宙 更新时间:2023-11-03 16:07:40 25 4
gpt4 key购买 nike

我为我们的一位开发人员构建了一组 API,以便在我们的 Web 应用程序中使用。我在 .NET 4.0 类库项目中执行此操作并编写集成测试以确保 API 与后端服务正确集成。在集成测试(单元测试项目)以及控制台应用程序中,API 正常工作并返回所有预期结果。但是,当我们从在 IIS 下运行的 ASP.NET 网页执行相同的 API 时,API 在以下代码行失败:

using (HttpWebResponse response = (HttpWebRequest)request.GetResponse())

失败是 WebException,状态为 SendFailure,内部异常中的套接字错误为 ConnectionReset (10054)。错误是 底层连接已关闭:发送时发生意外错误。这也使用 HTTPS(因此使用 X509)。

我已经知道这实际上是在发出请求时,但我试图指出 IIS 环境的不同之处,这会阻止流能够通过网络写入字节。我知道这实际上是 Web 服务服务器在我们有机会发送数据之前关闭连接,但我想再次强调,同样的 API 在集成或单元测试或控制台应用程序下一整天都可以正常工作.

我已经在 Internet 上找到尽可能多的相关文章和帖子,包括大量的 Msdn 文档,例如检查与证书相关的内容、修改 HTTP header 服务点属性。我真的很茫然,因为代码并不复杂,我写了很多次网络请求代码,但在这里:

private string ExecuteServiceMessages(Uri serviceUrl, X509Certificate clientCertificate, string requestBody)
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(serviceUrl);

request.ClientCertificates.Add(clientCertificate);
request.Date = DateTime.Now;
request.Method = WebRequestMethods.Http.Post;
request.ContentType = MediaTypeNames.Text.Xml;
request.UserAgent = "******";
request.KeepAlive = false;

using (Stream requestStream = request.GetRequestStream())
using (StreamWriter writer = new StreamWriter(requestStream))
{
writer.Write(requestBody);
writer.Close();
}

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
using (Stream responseStream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(responseStream))
{
string data = reader.ReadToEnd();

reader.Close();

return data;
}
}

证书由 X509Certificate.CreateFromCertFile 加载,我们用于测试的证书就在网站的目录中。我们不会直接从证书存储中提取它(除非我们不完全了解从文件加载证书时的工作原理)。

最佳答案

在您收到错误之前是否有任何类型的延迟(例如,可能表明发生超时的事情)?

当框架尝试验证该证书时会发生很多事情。它可能做的一件事(取决于您使用的 X509 策略)是检查证书吊销列表,这需要连接到互联网。当我们试图在互联网访问受限的环境中的服务器上运行代码时,这已经困扰了我们几次——它旋转正好 60 秒,然后返回您看到的错误(不是很有帮助)。如果是这样,您可以将 CRL 策略更改为脱机,或者编辑您的主机文件并覆盖 DNS,以便使用环回地址执行 CRL 检查——它会失败,但至少您不会超时。

关于c# - 为什么 HttpWebRequest.GetResponse() 在 IIS 下的 ASP.NET 页面中失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18709469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com