【发布时间】:2016-12-24 05:24:54
【问题描述】:
所以,我遇到了一个奇怪的情况。 我有一个运行自托管 OWIN API 服务器的 Azure 辅助角色。该工作者角色有 2 个实例(即:它是一个场)。与这些实例的通信通过 SSL/443 进行,并由 Azure 在其负载均衡器后面进行循环
我在现场有数百个客户,每分钟都与这个 Worker Role 通信并向它发送数据。每隔一段时间(比如每天),我的一个 Worker Role 实例会重新启动(我们称之为实例“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);
}
}
【问题讨论】:
标签: azure httpwebrequest webrequest azure-cloud-services