扩展 Microsoft 的 ASP.NET 反向 AJAX“长轮询”代码复合体示例

发布于 2024-11-02 07:01:34 字数 1541 浏览 0 评论 0 原文

我正在调查 Microsoft 的 反向 AJAX 示例,其中他们在 ScriptManager 中使用较长的超时

<asp:ScriptManager ID="ScriptManager1" runat="server" AsyncPostBackTimeout="2147483647">

,并且用于控制等待的 ManualResetEvent:

    private ManualResetEvent messageEvent = new ManualResetEvent(false);
    public Message DequeueMessage()
    {
        // Wait until a new message.
        messageEvent.WaitOne();
    }


    public void EnqueueMessage(Message message)
    {
        lock (messageQueue)
        {
            messageQueue.Enqueue(message);

            // Set a new message event.
            messageEvent.Set();
        }
    }

我注意到将

  • AsyncPostBackTimeout 设置为较低值 (5) 不会导致脚本超时或失败
  • 在 web 中.config 似乎没有效果
  • 当执行时间太长时,以下 javascript 似乎不会运行

     Sys.WebForms.PageRequestManager.getInstance() .add_endRequest(function (sender, args) {
       if (args.get_error() && args.get_error().name === 'Sys.WebForms.PageRequestManagerTimeoutException') {
           alert('超时了!');
           // 记住设置 errorHandled = true 以避免从 AJAX 库本身获取弹出窗口 
           args.set_errorHandled(true);
          }
         });
    

这让我问这些问题

  1. 影响此代码执行的正确 IIS 设置和 .js 回调是什么?< /p>

  2. 当此应用程序扩展时,IIS 基础结构的哪些部分会受到压力?

  3. 如果这成为基于 WAS 的 WCF 服务,#2 中的任何内容是否会发生变化?

I'm investigating Microsoft's reverse-AJAX sample wherein they use a long timeout in the ScriptManager

<asp:ScriptManager ID="ScriptManager1" runat="server" AsyncPostBackTimeout="2147483647">

And a ManualResetEvent to control the wait:

    private ManualResetEvent messageEvent = new ManualResetEvent(false);
    public Message DequeueMessage()
    {
        // Wait until a new message.
        messageEvent.WaitOne();
    }


    public void EnqueueMessage(Message message)
    {
        lock (messageQueue)
        {
            messageQueue.Enqueue(message);

            // Set a new message event.
            messageEvent.Set();
        }
    }

I've noticed that

  • Setting AsyncPostBackTimeout to a low value (5) does not cause the script to timeout or fail
  • <httpRuntime executionTimeout="5"/> in web.config does not seem to have an effect
  • The following javascript doesn't appear to run when execution takes too long

       Sys.WebForms.PageRequestManager.getInstance() .add_endRequest(function (sender, args) {
       if (args.get_error() && args.get_error().name === 'Sys.WebForms.PageRequestManagerTimeoutException') {
           alert('Caught a timeout!');
           // remember to set errorHandled = true to keep from getting a popup from the AJAX library itself 
           args.set_errorHandled(true);
          }
         });
    

Which makes me ask these questions

  1. What are the correct IIS settings and .js callbacks that affect the execution of this code?

  2. What portions of the IIS infrastructure are stressed when this application scales?

  3. Does anything in #2 change if this becomes a WAS-based WCF service?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一个人的旅程 2024-11-09 07:01:34

AsyncPostBackTimeout的值的单位是秒,所以5意味着5秒,当然我们不需要5秒来等待回调。
ExecutionTimeout 属性指示请求在被 ASP.NET 自动关闭之前允许执行的最大秒数。默认值为 110 秒。仅当元素中的 debug 属性设置为 false 时,此超时才适用。

•当执行时间过长时,以下 JavaScript 似乎不会运行

您怎么知道执行时间太长?

1.影响此代码执行的正确 IIS 设置和 .js 回调是什么?

对于此示例,我们不需要在 IIS 中进行特殊设置。只有网络问题可能会导致执行超时。

我很困惑为什么你想关注超时,当你使用我的示例时是否遇到了未处理的异常?

Jerry Weng - MSFT

The unit of the value of AsyncPostBackTimeout is second, so 5 means 5 seconds, of course we don't need 5 seconds to wait callback.
The ExecutionTimeout property indicates the maximum number of seconds a request is allowed to execute before being automatically shut down by ASP.NET. The default is 110 seconds. This time-out applies only if the debug attribute in the element is set to false.

•The following javascript doesn't appear to run when execution takes too long

How could you know the execution takes too long?

1.What are the correct IIS settings and .js callbacks that affect the execution of this code?

We don't need special settings in IIS for this sample. Only network issue could cause the execution timeout.

I'm confused why you want to focus on the timeout, did you get unhandled exception when you use my sample?

Jerry Weng - MSFT

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文