我们正在我们的Azure云服务上进行负载/性能测试,我们在那里托管了Web API。在一定数量的调用(比如500次)之后,云服务给出了错误的请求。
我们已经使用web角色在c#中构建了web API,并将它们托管在Azure云服务中。我浏览了一些文章/论坛,并尝试了下面提到的几个选项: 1.尝试增加云服务VM实例的大小。2.尝试将'maxAllowedContentLength‘值增加到52428800。3.尝试将'maxRequestLength‘值从5120增加到16240。4.使用VS Diagnostic工具检查是否内存泄漏。它们都不起作用。
在命中端点大约450 - 500次后,此错误仅来自涉及到子系统通信的端点。此错误不能在本地重现。为了走出这个问题,我们要么重新部署云服务,要么重新启动云服务。理想情况下,云服务应该工作到资源消耗达到100%。但在资源利用率最高为10 - 15%的情况下,每调用大约500次,就会出现以下错误。
<HTML>
<HEAD>
<TITLE>Bad Request</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii">
</HEAD>
<BODY>
<h2>Bad Request - Request Too Long</h2>
<hr><p>HTTP Error 400. The size of the request headers is too long.</p>
</BODY>
</HTML>发布于 2020-08-22 02:53:22
对我来说,我花了几天时间调查这个问题。读取blobs和解决方案,清除缓存,将标头大小的最大限制设置为更大的数字,但都不起作用。最终它会失败。
如果我重新编辑我的应用程序,这个问题不会发生,但经过一段时间后,它会开始出现,这让我意识到它可能会添加到内存中。
我从我的项目中调用了另一个API,在那里我们创建了请求并发送了它,并获得了数据。
public async Task<DataList> GeDataList()
{
Client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", await _tokenProvider.GetBearerToken());
Client.DefaultRequestHeaders.Add("X-CorrelationId", Guid.NewGuid().ToString());
var requestMessage = new HttpRequestMessage()
{
Method = HttpMethod.Post,
RequestUri = new Uri($"{Config.apiurl}{string.Format(Config.id, id2 == null ? id1 : id2)}")
};
requestMessage.Headers.Add(Constants.TRACE_HEADER, "true");
requestMessage.Headers.Add(Constants.SUBSCRIPTION_KEY_HEADER, Config.APIKey);
requestMessage.Content = new StringContent(JsonConvert.SerializeObject(requestdata), null, "application/json");
...................................
...................................
...................................
}现在这是罪魁祸首
Client.DefaultRequestHeaders.Add("X-CorrelationId", Guid.NewGuid().ToString());在没有看到它的情况下,这个客户机是HttpClient的一个类级变量。创建HttpClient的单个实例是可以的,但您必须意识到
.Add标头方法,始终附加到键,并且不重写。许多人认为它是key,value.It实际上是key和aaray的价值。因此,每个请求都会不断向数组中添加新对象的相关性Id。最终,这会变成大量的报头
Fix:您可以先清除密钥
if(Client.DefaultRequestHeaders.Contains("X-CorrelationId")) {
Client.DefaultRequestHeaders.Remove("X-CorrelationId");
}
Client.DefaultRequestHeaders.Add("X-CorrelationId", Guid.NewGuid().ToString());您仍然需要处理征服性问题,因为多个征服者请求可能会更新和覆盖您的头文件。

发布于 2019-05-09 17:50:47
回答“这里出了什么问题?”这个问题并不容易。当你看到400错误的时候。这意味着请求本身不知何故已经变得有缺陷了。互联网协议HTTP没有被正确遵守(至少根据why服务器),这就是请求不能被处理的原因。服务器已将请求解释为错误甚至有害的请求。因此,它阻止了网站的正确显示。错误报告的原因通常与使用的浏览器或用户错误有关。
I不正确的URL:就像404错误一样,如果用户输入错误的互联网地址,或者,例如,插入不允许的特殊字符,就会生成一个坏请求。
不正确的cookies:如果浏览器中的cookies已过时或不正确,这是可能发生错误400的另一个原因。过期的DNS记录:您的DNS缓存可能包含链接到错误IP地址的数据。
文件太大:如果您尝试上传特别大的文件,服务器可能会拒绝接受它们。服务器将其归类为“错误请求”。头部过长:通信时,客户端和服务器端使用头部来定义请求。一些set服务器设置了报头长度的上限。当出现错误消息“HTTP 400 Bad Request”时,通信问题并不是一目了然的。但是,如果目标can服务器使用IIS 7.0、IIS 7.5或IIS 8.0,则可以从状态代码中获取更详细的信息:
锁定Header
错误可能由上述任何原因引起。希望能有所帮助。
https://stackoverflow.com/questions/55897308
复制相似问题