所以,我有一个奇怪的问题。 我有一个运行自托管的OWIN API服务器的Azure工作者角色。这个工作者角色有2个实例(即:它是一个农场)。与这些实例的通信是通过SSL/443进行的,并且由负载平衡器后面的Azure进行轮回处理。WebRequest.Create忽略我的循环网络场
我在现场有数百个客户端,每分钟都与该工作者角色通信并向其发送数据。每隔一段时间(比如每天说一次),我的一个工作者角色实例重新启动(我们称之为实例“A”)。重新启动需要3-4分钟,并且在重新启动时,我的所有客户端都切换到启动并运行“B”的实例。这很好。 “A”实例重新启动后会发生什么情况并不好。没有新的请求到达“A”实例,每个客户端都“卡住”未重启的“B”实例。我最终有2个负载平衡的服务器,其中一个运行在1%的CPU和另一个在60%的CPU上。我怀疑问题在于我的客户端连接到我的工作者角色的方式。这是代码。我究竟做错了什么? WebRequest.Create()是一个问题吗?我需要切换到不同的客户端吗?哪一个?
TIA
private string PostData(BearerToken token, Guid accountId, string path, object input)
{
var url = _apiUrl + path;
try
{
var client = WebRequest.Create(url);
client.Headers.Add("Authorization", string.Format("Bearer {0}", token.AccessToken));
client.Headers.Add("AccountId", accountId.ToString());
client.Method = "POST";
client.Timeout = 120000;
client.ContentType = "application/json";
var data = JsonConvert.SerializeObject(input);
using (var stream = client.GetRequestStream())
using (var writer = new StreamWriter(stream))
{
writer.Write(data);
writer.Flush();
writer.Close();
using (var response = client.GetResponse())
{
using (var read = response.GetResponseStream())
{
if (read == null) return string.Empty;
using (var reader = new StreamReader(read))
{
return reader.ReadToEnd();
}
}
}
}
}
catch (Exception ex)
{
throw new Exception(string.Format("{0} ({1})", ex.Message, url), ex);
}
}
使用默认的五元组分布 – Igorek
它可能是您的客户端重用连接(HTTP保持活动)?你可以嗅探那个交通吗? – evilSnobu
默认为false,我没有更改默认值 – Igorek