如何调用返回void的Web服务的异步方法?

0 c# web-services

我从我的应用程序调用的Web服务有两种方法.

  1. XmlNode getCase(string parameter) // synchronous
  2. void getCaseAsync(string parameter) //async

我可以简单地调用方法1并将结果存储在像这样的xmlnode中,

XmlNode node=webservice.getCase("test");
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何从async方法返回void返回结果.我尝试了这个,但得到了一个erorr:

IAsyncResult result = webservice.getCaseAsync(("test");
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

是的Brian你是对的有一个"已完成"的事件,我已经在我的Form consturcor类中实现了这样的事情,

webService.getCaseCompleted + = new webService.getCaseCompletedEventHandler(webService_getCaseCompleted);

void webService_getCaseCompleted(object sender,webService.getCaseCompletedEventArgs e){webService.GetCaseAsync("test"); 我的表单上还有一个按钮,我想从那里运行代码.我试过这个,私有void button1_Click(对象发送者,EventArgs e){webService_getCaseCompleted(this,null); 但是我得到错误,"e"是Null.我应该怎么运行这个方法?

谢谢,戴夫

Bri*_*sio 6

假设您正在讨论WCF代理,它将如下所示:

我的IService看起来像这样:

[ServiceContract]
public interface IService
{
    [OperationContract]
    void DoSomething();
}
Run Code Online (Sandbox Code Playgroud)

在您的客户端中,您的代码如下所示:

var serviceProxy = new MyService.Service1Client();
serviceProxy.DoSomethingCompleted += DoSomethingComplete;
serviceProxy.DoSomethingAsync();
Run Code Online (Sandbox Code Playgroud)

你的异步回调看起来像这样:

private void DoSomethingComplete(object sender, AsyncCompletedEventArgs e)
{
    // Handle the result
}
Run Code Online (Sandbox Code Playgroud)

在已完成的处理程序中,您可以检查服务调用是否成功(e.Cancelled == false和e.Error == null).

记得.异步调用不会立即给出结果.它会在完成时告诉你.

希望这可以帮助?