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

时间:2009-08-26 13:01:47

标签: c# web-services

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

  1. XmlNode getCase(string parameter) // synchronous
  2. void getCaseAsync(string parameter) //async
  3. 我可以简单地调用方法1并将结果存储在像这样的xmlnode中,

    XmlNode node=webservice.getCase("test");
    

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

    IAsyncResult result = webservice.getCaseAsync(("test");
    

    有什么想法吗?

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

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

    void webService_getCaseCompleted(object sender,webService.getCaseCompletedEventArgs e)         {          webService.GetCaseAsync( “测试”);         } 我的表单上还有一个按钮,我想从那里运行代码。我试过这个,         private void button1_Click(object sender,EventArgs e)         {             webService_getCaseCompleted(this,null);          } 但我得到的错误是“e”是Null。我该如何运行这种方法?

    谢谢, 戴夫

2 个答案:

答案 0 :(得分:6)

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

我的IService看起来像这样:

[ServiceContract]
public interface IService
{
    [OperationContract]
    void DoSomething();
}

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

var serviceProxy = new MyService.Service1Client();
serviceProxy.DoSomethingCompleted += DoSomethingComplete;
serviceProxy.DoSomethingAsync();

您的异步回调将如下所示:

private void DoSomethingComplete(object sender, AsyncCompletedEventArgs e)
{
    // Handle the result
}

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

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

希望这有帮助吗?

答案 1 :(得分:0)

如果方法返回类型为void,则表示它不返回任何内容。如果它没有返回任何内容,那么你不能指望任何结果,这就是你的作业无效的原因。你应该调用这样的方法:

webservice.getCaseAsync("test");

如果您希望它返回某些内容,请将方法返回类型修改为void以外的其他内容。