我编写了一个webmethod,返回用户列表,虽然服务工作正常,但当我从页面调用webservice中的方法返回类型为void时。
答案 0 :(得分:2)
您可能会被忽略的是,Silverlight中的Web服务调用必须异步处理。
当您定义WebMethod时,例如,您在名为WorkMan的类上有一个名为DoWork的。您在Silverlight中的代码最终会如下所示:
WorkManSoapClient client = new WorkManSoapClient();
client.DoWorkCompleted += new EventHandler<DoWorkCompletedEventArgs>(this.DoWorkCompleteHandler); // where DoWorkCompletedHandler handles the callback.
然后调用实际方法并允许回调处理结果。
client.DoWorkAsync();
如果您的webmethod返回一个值,您的EventArg对象将具有您可以用于结果的Result属性。
最后一点:个人风格的东西,但我喜欢lambda表达式,而不是为回调生成一个全新的方法。我可能会写以下内容:
WorkManSoapClient client = new WorkManSoapClient();
client.DoWorkCompleted += (s,e) => {
if(e.Result != null){
object foo = e.Result;
}
};
client.DoWorkAsync();