所以,我有一個奇怪的問題。 我有一個運行自託管的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