void dosomethingtest()
{
localhost.service service = new windowsapp.localhost.service();
service.helloworldcompleted += new windowsapp.localhost.helloworldcompletedeventhandler(service_helloworldcompleted);
// do asyn calling here
service.helloworldasync();
}
void service_helloworldcompleted(object sender, windowsapp.localhost.helloworldcompletedeventargs e)
{
if (e.error == null)
{
messagebox.show(e.result);
}
else
{
messagebox.show(e.error.message);
}
}
服务器端代码
[webservice(namespace = "http://tempuri.org/")]
[webservicebinding(conformsto = wsiprofiles.basicprofile1_1)]
public class service : system.web.services.webservice
{ public service () {
}
[webmethod] public string helloworld() {
return "hello world";
}
}
很简单,没有了asynccallback、iasyncresult 这两个烦人的东西,调用的代码变得简洁、优雅了,而且可以从e.result得到强类型的返回值(上例为"hello world")。但是,有兴趣的话,可以看看vs 2005生成的referance.cs文件,那可比2003中的复杂很多。其中可以看到system.componentmodel.asynccompletedeventargs 、 system.threading.sendorpostcallback(delegate)这两个在 .net 1.x 中没有的“怪物”,估计用到的地方还不止webservice客户端。
新闻热点
疑难解答
图片精选