日期:2012-09-16  浏览次数:20535 次

////////////////////////////////////////////////////////////////////////////////
//Author: stardicky //
//E-mail: stardicky@hotmail.com //
//QQNumber: 9531511 //
//CompanyName: Ezone International //
//Class: HBS-0308 //
//title: 异步调用Web服务 //
////////////////////////////////////////////////////////////////////////////////

//文件数量2个

///文件1////////////////////////////////////////////////////////////////////////

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.Web.Services;

namespace WebServiceDemo
{
/// <summary>
/// Service1 的摘要说明。
/// </summary>
[WebService(Namespace="http://www.ezone.com.cn")]
public class EzoneService : System.Web.Services.WebService
{
public EzoneService()
{
//CODEGEN: 该调用是 ASP.NET Web 服务设计器所必需的
InitializeComponent();
}

#region 组件设计器生成的代码

//Web 服务设计器所必需的
private IContainer components = null;

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
}

/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if(disposing && components != null)
{
components.Dispose();
}
base.Dispose(disposing);
}

#endregion

// WEB 服务示例
// HelloWorld() 示例服务返回字符串 Hello World
// 若要生成,请取消注释下列行,然后保存并生成项目
// 若要测试此 Web 服务,请按 F5 键

[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
}
}
///文件2////////////////////////////////////////////////////////////////////////
using System;
using System.Web.Services;
using System.Web;
using ConsoleApp.www.ezone.com.cn;

namespace ConsoleApp
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class MyConsole
{
static bool MyStatus=false;

/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//
//创建Web服务对象
EzoneService MyServiceObj=new EzoneService();

Console.WriteLine("开始调用远程Web服务......");

//开始异步调用远程服务
MyServiceObj.BeginHelloWorld(new AsyncCallback(MyHelloWorld),MyServiceObj);

int i=0;
while(MyConsole.MyStatus!=true)
{
i++;
Console.WriteLine("等待Web服务调用结束......#"+i.ToString());
}

Console.WriteLine("远程调用结束");


}

//该方法由操作系统自动调用
static void MyHelloWorld(IAsyncResult iar)
{
EzoneService MyService=(EzoneService)iar.AsyncState;
Console.WriteLine(MyService.EndHelloWorld(iar));
//结束远程调用

MyConsole.MyStatus=true;
}
}
}

///结果/////////////////////////////////////////////////////////////////////////
//注意:具体等待次数与你的机器速度有关,与程序无关!
开始调用远程Web服务......
等待Web服务调用结束......#1
等待Web服务调用结束......#2
等待Web服务调用结束......#3
等待Web服务调用结束......#4
等待Web服务调用结束......#5
等待Web服务调用结束......#6
等待Web服务调用结束......#7
等待Web服务调用结束......#8
等待Web服务调用结束......#9
等待Web服务调用结束......#10
等待Web服务调用结束......#11
等待Web服务调用结束......#12
等待Web服务调用结束......#13
等待Web服务调用结束......#14
等待Web服务调用结束......#