0

我有一个网站,它经常向外部 Web 服务发出请求,我希望这些调用是异步和并行的,以避免阻塞并稍微加快网站速度。基本上,我有 8 个小部件,每个小部件都必须进行自己的网络调用。

出于某种原因,它们中只有前 3 个左右真正加载异步,然后线程没有及时释放,其余的小部件按顺序加载。如果我能让其中 3 个并行加载,然后再并行加载 3 个,再并行加载 2 个,我会很高兴。所以问题实际上是线程没有及时释放。

我猜答案与一些 IIS 配置有关。我正在非服务器操作系统上进行测试,所以也许这是其中的一部分。

编辑@jon skeet:

我正在使用反射来调用这样的网络调用:

output = methodInfo.Invoke(webservice, parameters);

小部件操作(最终调用 Web 服务)通过 jquery $.each() 循环和 .load 函数调用(也许这会导致瓶颈?)。小部件操作在异步控制器中设置为异步方法。

这是其中一种异步方法的代码(它们都是这样设置的):

public void MarketTradeWidgetAsync()
    {
        AsyncManager.OutstandingOperations.Increment();

        //a bunch of market trade logic


        //this eventually calls the web service
        PlanUISetting uiSettingMarketQuotesConfig = WebSettingsProviderManager.Provider.GetMarketQuotes(System.Configuration.ConfigurationManager.AppSettings["Theme"], SessionValues<String>.GlobalPlanID, SessionValues<String>.ParticipantID, "MARKETQUOTES");

        AsyncManager.OutstandingOperations.Decrement();

    }


public ActionResult MarketTradeWidgetCompleted(MarketTradeTool markettradetool)
    {
        if (Session.IsNewSession)
            return PartialView("../Error/AjaxSessionExpired");
        else
        {
            ViewData["MarketData"] = markettradetool;
            return PartialView(markettradetool);
        }
    }

而且,就像我说的,这些方法是通过 jquery 调用的。我的想法是,由于操作方法是异步的,它们应该在被调用后将控制权交还给 jquery,对吧?

4

1 回答 1

0

当前页面的 SessionState = "readonly" 解决了这个问题。显然会话锁定是问题所在。

于 2012-05-02T18:11:26.757 回答