我从我的应用程序调用的Web服务有两种方法。
XmlNode getCase(string parameter) // synchronous
void getCaseAsync(string parameter) //async
我可以简单地调用方法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。我该如何运行这种方法?
谢谢, 戴夫
答案 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
以外的其他内容。