小编sin*_*ity的帖子

如何使用超时Azure Web App的长响应来防止HttpWebRequest

我们在C#中使用HttpWebRequest从Azure Web App中的Internet资源获取数据.问题是Azure限制了它保持连接活动的时间(大约240秒).由于我们的应用程序的性质,响应有时需要超过240秒.发生这种情况时,网页将变为白色,"查看源代码"将显示零源代码(这使得此问题难以调试).

以下是一些示例代码:

        webRequest = WebRequest.Create(PAGE_URL) as HttpWebRequest;
        webRequest.Method = "POST";
        webRequest.ContentType = "application/x-www-form-urlencoded";
        webRequest.CookieContainer = cookies;
        webRequest.Timeout = Timeout.Infinite;
        webRequest.KeepAlive = true;
        StreamWriter requestWriter2 = new
            StreamWriter(webRequest.GetRequestStream());
        requestWriter2.Write(postString); 
        requestWriter2.Close();
        WebResponse response = webRequest.GetResponse();
        Stream stream = response.GetResponseStream();
Run Code Online (Sandbox Code Playgroud)

添加webRequest.Timeout和webRequest.KeepAlive没有解决问题.

jbq在这个帖子中提到他通过每隔5秒发送一个"换行符" 来解决这个问题,但是没有解释如何完成这个.他正在回答有关Azure VM的问题,但我认为Azure Web App在我认为负责超时的负载均衡器方面会有类似的行为.

问题:如何发送一个HttpWebRequest,然后发送另一个HttpWebRequest,而前一个 HttpWebRequest 使用空行运行以维持连接并阻止Azure负载均衡器(?)超时蔚蓝应用程序?是否需要使用新的会话变量?也许是异步方法?我是否需要在主要请求之前发送"pinging" 请求?如果是这样,这将如何实现?或者它完全是另一回事?请提供一些源代码作为示例:)

注意:您没有需要使用HttpWebRequest的复制这个问题.将Visual Studio中的调试器附加到实时Azure Web App.在Visual Studio中的任何代码段放置一个断点.当该断点被击中时,大约4分钟后,您将看到浏览器中的页面停止加载并变为空白源.因此,它与HttpWebRequest没有特别的关系,但这是一种通常会导致此类问题的操作,因为某些响应需要超过4分钟.

*编辑:我认为我正在寻找的是异步方法的实现.我会在发现令人满意的实施时更新这篇文章.

c# asp.net azure azure-web-sites visual-studio-2015

5
推荐指数
1
解决办法
2189
查看次数

将Hash推送到Array:last Hash覆盖以前的数组元素

我有以下Ruby脚本:

arr = ['bob', 'jack', 'smith']
array_of_hashes = Array.new
hash = Hash.new

arr.each do |item|
  hash.clear
  hash[:name] = item
  array_of_hashes << hash
end

puts array_of_hashes
Run Code Online (Sandbox Code Playgroud)

这将返回一个哈希数组,其中:name键全部来自最后一个元素.

[
    [0] {
        :name => "smith"
    },
    [1] {
        :name => "smith"
    },
    [2] {
        :name => "smith"
    }
]
Run Code Online (Sandbox Code Playgroud)

我希望它能返回以下内容,但我不知道为什么最后一个Hash元素会覆盖所有以前的数组元素:

[
    [0] {
        :name => "bob"
    },
    [1] {
        :name => "jack"
    },
    [2] {
        :name => "smith"
    }
]
Run Code Online (Sandbox Code Playgroud)

编辑:谢谢大家的回答.很高兴有一些不同的方法来完成同样的事情.我测试了每个解决方案,每个解决方案都很棒.我最终使用的是与原始代码最相似的那个; 但我的用例是一个简单的本地脚本 - 它不是在工业大小的应用程序中使用 - 在这种情况下,我可能会选择不同的解决方案.

ruby arrays hash loops

3
推荐指数
1
解决办法
1020
查看次数

标签 统计

arrays ×1

asp.net ×1

azure ×1

azure-web-sites ×1

c# ×1

hash ×1

loops ×1

ruby ×1

visual-studio-2015 ×1