【问题标题】:Async web service call from asp.net 2.0 web client to WCF web service (async issue)从 asp.net 2.0 Web 客户端到 WCF Web 服务的异步 Web 服务调用(异步问题)
【发布时间】:2026-02-19 07:25:01
【问题描述】:

我正在尝试从 asp.net 2.0 Web 客户端向 WCF Web 服务进行异步 Web 服务调用。我使用带有异步选项的 svcutil.exe 创建了代理类。以下是调用 Web 服务的客户端代码示例:

protected void Page_Load(object sender, EventArgs e)   
{   
  WSClient client = new WSClient();   
  AsyncCallback asyncCallback = new AsyncCallback(WebServiceCallback);   
  AsyncCallState asyncCallState = new AsyncCallState(client);   
  client.BeginWS(value, asyncCallback, asyncCallState);   
  Response.Write("Big Test");   
}  

public void WebServiceCallback(IAsyncResult ar)   
{   
  AsyncCallState asyncCallState = (AsyncCallState)ar.AsyncState;   
  WSsClient client = (WSClient)asyncCallState.WebServiceState;   

  WSClientResult result = client.EndWS(ar);   
}  

使用代码供参考; Page_Load 中的所有内容都会执行,但页面不会显示“Big Test”,直到在回调中执行 client.EndWS。这似乎不是异步的。任何关于如何使异步调用异步的想法或建议都值得赞赏。

【问题讨论】:

  • 你是什么意思,“似乎不是异步的”?你看到了什么结果?
  • 他似乎希望在 Web 服务仍在执行时看到“Big Test”出现在浏览器中。因此,我的评论是他不懂 ASP.NET。

标签: wcf web-services proxy client


【解决方案1】:

这不是网络服务问题。您需要了解 ASP.NET 的工作原理。

具体见Wicked Code: Asynchronous Pages in ASP.NET 2.0

【讨论】:

    【解决方案2】:

    您需要在页面中添加异步指令!完成此操作后,您可以使用已完成和异步。

    例如

    接下来,您将事件连接到 somemethodcompleted({some eventhandler}),您应该在生成的代理中找到它。

    然后调用somemethodasync。将启动任务。

    使用此方法将自动登记到 asp.net 的页面任务中,这将阻止您在方法返回之前完成页面生命周期。

    希望有帮助

    【讨论】: