【问题标题】:Multiple sequential async web service calls from an asynchronous ASP.NET page?来自异步 ASP.NET 页面的多个顺序异步 Web 服务调用?
【发布时间】:2009-10-08 00:42:17
【问题描述】:

我需要从异步 ASPX 页面进行 n 次异步 Web 服务调用。

每个 WS 调用都会检索二进制文件的一部分。然后代码将文件块输出到页面的响应流。

offset = 0;
blocksize = 1024;
output = getFileBlock(path, offset, blocksize);

//BinaryWrite output to Response

offset += blocksize;
output = getFileBlock(path, offset, blocksize);

//BinaryWrite output to Response

//etc...

每个 getFileBlock 都是一个 Web 服务调用,我想将其设为异步。但是,我需要按特定顺序进行这些调用。

对如何实现有任何建议?

【问题讨论】:

    标签: asp.net asynchronous content-disposition asynchronous-pages


    【解决方案1】:

    调用异步函数。在异步完成处理程序中,输出结果,如果您还需要更多数据,请再次调用异步函数。

    public class Answer
    {
      int _offset = 0;
      const int blocksize = 1024;
      string _path;
    
      static int main()
      {
        Init();
        getFileBlock(_path, _offset, _blocksize);
      }
      void function Init()
      {
        _path = "c:\foo.dat";
        CompletionEvent +=  HandleCompletion;
        getFileBlock(_path, _offset, _blocksize);
      }
    
      void function HandleCompletion( object sender, CompletionEventArgs e )
      {
        OutputResult( e.Result );
        _offset += blocksize;
        if ( _offset < limit )
        {
          getFileBlock(_path, _offset, _blocksize);
        }
      } 
    }
    

    【讨论】:

    • Phillip - 我从 ASP.NET 异步页面调用它。所以没有main()。我想知道这将如何在 ASP.NET 中完成。
    • 为了完整起见,我添加了main(),作为一种表示给定代码的方式,调用Init(),然后调用异步函数getFileBlock()。您可以从 ASP.Net 页面调用该代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 2023-03-15
    • 2011-09-03
    相关资源
    最近更新 更多