.NET2.0中,Winform程序如何异步调用Web Service呢?[Demo下载]——与.net1.1环境下比较
2007-01-19 15:24
411 查看
最近在MSDN上看到一个在.NET1.1中Winform程序异步调用WebService的例子
我准备模仿着迁移到.NET2.0环境中,遗憾的是,一切不是那么简单。
首先,.net1.1中调用的WebService的详细说明,可以上MSDN WebCasts 下载一个视频讲座和Demo代码。
或者也可以参见TerryLee的Blog :/article/4584259.html
文中详细说明了在Service被引用之后的一个类文件Reference.cs中,会有“Begin<WebServiceMethodName>和End<WebServiceMethodName>”("<"、">"中的内容是web service中调用的方法)。
这样可以在客户端(和服务器端)都可以通过proxy、回调等方法,实现异步调用Web Service。
但是,.Net 2.0中的类文件Reference.cs,本身就运用了proxy、回调等方法,这样,在客户端就可以这样实现了:
private localhost.Service service = new AsyncClient.localhost.Service();
private void btnSet_Click(object sender, EventArgs e)
{
service.HelloCompleted += new AsyncClient.localhost.HelloCompletedEventHandler(AsyncCall_ClientProxy);
service.HelloAsync(this.txtName.Text);
}
private void AsyncCall_ClientProxy(object sender, AsyncClient.localhost.HelloCompletedEventArgs e)
{
if (e.Error == null)
{
this.txtResult.Text = e.Result;
}
else
{
this.txtResult.Text = e.Error.Message;
}
}
因为,我们可以看到,在Reference.cs中有这样的几个方法:
/// <remarks/>
public void HelloAsync(string strName) {
this.HelloAsync(strName, null);
}
/// <remarks/>
public void HelloAsync(string strName, object userState) {
if ((this.HelloOperationCompleted == null)) {
this.HelloOperationCompleted = new System.Threading.SendOrPostCallback(this.OnHelloOperationCompleted);
}
this.InvokeAsync("Hello", new object[] {strName}, this.HelloOperationCompleted, userState);
}
private void OnHelloOperationCompleted(object arg) {
if ((this.HelloCompleted != null)) {
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
this.HelloCompleted(this, new HelloCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
}
}
Demo下载:http://files.cnblogs.com/lxinxuan/AsyncWebService.rar
[WSE3.0实现的部分还没有增加]
注:部分代码来自网上。
我准备模仿着迁移到.NET2.0环境中,遗憾的是,一切不是那么简单。
首先,.net1.1中调用的WebService的详细说明,可以上MSDN WebCasts 下载一个视频讲座和Demo代码。
或者也可以参见TerryLee的Blog :/article/4584259.html
文中详细说明了在Service被引用之后的一个类文件Reference.cs中,会有“Begin<WebServiceMethodName>和End<WebServiceMethodName>”("<"、">"中的内容是web service中调用的方法)。
这样可以在客户端(和服务器端)都可以通过proxy、回调等方法,实现异步调用Web Service。
但是,.Net 2.0中的类文件Reference.cs,本身就运用了proxy、回调等方法,这样,在客户端就可以这样实现了:
private localhost.Service service = new AsyncClient.localhost.Service();
private void btnSet_Click(object sender, EventArgs e)
{
service.HelloCompleted += new AsyncClient.localhost.HelloCompletedEventHandler(AsyncCall_ClientProxy);
service.HelloAsync(this.txtName.Text);
}
private void AsyncCall_ClientProxy(object sender, AsyncClient.localhost.HelloCompletedEventArgs e)
{
if (e.Error == null)
{
this.txtResult.Text = e.Result;
}
else
{
this.txtResult.Text = e.Error.Message;
}
}
因为,我们可以看到,在Reference.cs中有这样的几个方法:
/// <remarks/>
public void HelloAsync(string strName) {
this.HelloAsync(strName, null);
}
/// <remarks/>
public void HelloAsync(string strName, object userState) {
if ((this.HelloOperationCompleted == null)) {
this.HelloOperationCompleted = new System.Threading.SendOrPostCallback(this.OnHelloOperationCompleted);
}
this.InvokeAsync("Hello", new object[] {strName}, this.HelloOperationCompleted, userState);
}
private void OnHelloOperationCompleted(object arg) {
if ((this.HelloCompleted != null)) {
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
this.HelloCompleted(this, new HelloCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
}
}
Demo下载:http://files.cnblogs.com/lxinxuan/AsyncWebService.rar
[WSE3.0实现的部分还没有增加]
注:部分代码来自网上。
相关文章推荐
- c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程
- .NET2.0环境下的Ajax选型和应用(提供Demo源码下载)
- C#之VS2010ASP.NET页面调用Web Service和winform程序调用Web Service
- Websharp框架 在Win2003环境下 WinForm程序无法调用WebService问题解决
- 如何创建、发布Web Service和 C#WINFORM里如何调用WEB Service API
- Ajax程序:处理异步调用中的异常(在客户端调用Web Service代理时发生异常的处理办法)
- 如何创建、发布Web Service和 C#WINFORM里如何调用WEB Service API
- WinForm如何调用Web Service
- WinForm如何调用Web Service
- 将QT开发的界面程序封装成DLL,在VC中成功调用(必须有消息循环,所以使用了QTWinmigrate,附CSDN可下载的Demo)
- WinForm如何调用Web Service
- 在WinForm中用C#如何调用外部程序
- WinForm如何调用Web Service【摘】
- 【.Net码农】WinForm如何调用Web Service
- 如何在没有IIS的环境中运行Web程序和Web Service[原创]
- 如何在C++中调用C程序?(讲的比较清楚)
- .NET2.0环境下的Ajax选型和应用(提供Demo源码下载)
- 如何创建、发布Web Service和 C#WINFORM里如何调用WEB Service API
- WinForm如何调用Web Service
- 一个简单的webservice的demo(下)winform异步调用webservice