【问题标题】:Azure web role receiving results from a long processAzure Web 角色从漫长的过程中接收结果
【发布时间】:2011-11-25 08:47:10
【问题描述】:

我的 Azure Web 角色使用 Ajax 调用将工作委托给辅助角色的函数(在 default.aspx.cs 中)。工作角色可能需要 30-40 分钟,具体取决于用户选择的输入文件。如果工作角色快速返回结果,则它会被 webrole 接收并正确显示在网页上。如果需要很长时间,webrole 仍会收到结果(尝试打印以进行跟踪),但网页上不会显示任何内容。

我觉得有某种超时会破坏页面上的 ajax 代码和 webrole 之间的连接。

代码如下:

    <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <script type="text/javascript" src="Scripts/jquery-1.4.1.min.js"></script>
    <script type="text/javascript">
    $(document).ready(function () {
         $("#btnSubmit").click(function () {
            var params = '{ map1 : "' + document.getElementById('<%=ddlMap1.ClientID %>').value + '",' +
                    'map2 : "' + document.getElementById('<%=ddlMap2.ClientID %>').value + '",' +
                    'op : "' + document.getElementById('<%=ddlOperator.ClientID %>').value + '"}';
            $('#spinner').show();
            $('#results').text('');
            $.ajax({
                type: "POST",
                url: "Default.aspx/Overlay",
                data: params,
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msg) {
                    var dmsg = '';
                    if (msg == null) {
                        dmsg = 'null';
                    } else {
                        dmsg = msg.d;
                    }
                    $('#spinner').hide();
                    $('#results').text(dmsg);
                },
                error: function (error) {
                    $('#results').text('');
                }
            });
        });
    });
    </script>

【问题讨论】:

    标签: ajax azure


    【解决方案1】:

    Azure 负载均衡器会在 1 分钟后终止所有非活动连接。请参阅我对this question 的回答,了解如何解决此问题。

    【讨论】:

    • 在我的情况下,连接保持活动状态,因为我不断检查队列存储(一种轮询以检查工作是否结束)。只是覆盖功能的结果不会显示在标签中。我想知道是否存在使代码无法访问标签的设置。
    • 如果你实际上是从你的 ajax 调用中得到一个结果,而它只是没有像你期望的那样设置值,那么这将是你如何设置值的问题。如果没有看到您的 HTML,很难说出问题所在,但我会尝试在按钮单击时设置 #results 的值以确保正确。
    【解决方案2】:

    我会尝试覆盖default timeout value of jquery 看看是否有帮助:

    $.ajaxSetup({
      timeout: 3600000 // one hour
    });
    

    这个问题可能是由 jquery 引起的,但也依赖于browser and network settings as stated in this SO question。

    【讨论】:

      猜你喜欢
      • 2014-09-11
      • 2012-10-29
      • 1970-01-01
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多