有两个应用程序通过 Web 服务进行通信以传输 XML。
应用程序“A”发送请求(您好,我想要 XML),应用程序“B”为应用程序 A 创建 XML。
然而,应用程序 B 有时需要 2 分钟来创建 XML,据我目前的研究,Web 服务的标准超时为 90 秒,而应用程序 A 从未收到 XML。
因此应用程序 A 的开发人员增加了超时时间 至 3 分钟(180000),见下文:
public GetData GetSO(Envelope request)
{
try
{
HttpWebRequest client = (HttpWebRequest)WebRequest.Create(_urlGetSO);
client.Method = 'Post';
HttpWebResponse response;
client.Timeout = 180000;
// ....
}
catch (Exception ex)
{
// ...
}
}
但问题仍然存在,有什么办法吗?
要在 ASP.NET C# 中使用 HttpClient 设置 SOAP Web 服务调用的超时,可以使用 HttpClient.Timeout 属性,该属性指定请求超时之前等待的最长时间。 此外,您还可以设置 HttpClient.ReadTimeout 和 HttpClient.WriteTimeout 属性,它们分别用于读取和写入操作。以下是设置这些超时的方法:
using System;
using System.Net.Http;
class Program
{
static async System.Threading.Tasks.Task Main(string[] args)
{
// Create an instance of HttpClient
HttpClient client = new HttpClient();
// Set the timeout for the entire request (including both sending and receiving)
client.Timeout = TimeSpan.FromSeconds(30); // for example, 30 seconds timeout
// Set the timeout for reading data from the server
client.ReadTimeout = TimeSpan.FromSeconds(20); // for example, 20 seconds timeout
// Set the timeout for writing data to the server
client.WriteTimeout = TimeSpan.FromSeconds(20); // for example, 20 seconds timeout
// Make the SOAP web service call
try
{
HttpResponseMessage response = await client.GetAsync("http://your-soap-service-url");
// Process the response as needed
}
catch (HttpRequestException ex)
{
// Handle timeout or other errors
}
}
}
在此示例中:
client.Timeout设置整个请求允许的最大时间
(发送和接收)。
client.ReadTimeout设置允许读取数据的最大时间 来自服务器。
client.WriteTimeout设置允许写入数据的最大时间
到服务器。调整超时值(Timeout、ReadTimeout、
WriteTimeout)根据您的要求。
记住要处理由于超时或其他错误而可能发生的任何潜在的 HttpRequestException。