WebRequest.Create忽略我的循环Web场

时间:2016-12-24 05:24:55

标签: azure httpwebrequest webrequest azure-cloud-services

所以,我有一个奇怪的情绪。 我有一个Azure辅助角色,它运行自托管的OWIN API服务器。这个辅助角色有2个实例(即:它是一个农场)。与这些实例的通信是通过SSL / 443进行的,并由Azure在其负载均衡器后面进行循环访问

我在该领域拥有数百个客户端,每分钟都与此工作者角色进行通信并向其发送数据。每隔一段时间(比如说每天),我的一个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);
        }
    }

1 个答案:

答案 0 :(得分:0)

您的负载均衡器分发模式是否设置为2或3元组?这可以解释亲和力。

https://docs.microsoft.com/en-us/azure/load-balancer/load-balancer-distribution-mode