1、手动发送HTTP请求调用WebService

(1)、Get方式调用:

string strURL = "http://localhost:12074/Service1.asmx/GetProductPrice?ProductId=";strURL += this.textBox1.Text;//创建一个HTTP请求HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strURL);//Get请求方式request.Method="GET";//获得响应流HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();Stream s = response.GetResponseStream();XmlTextReader Reader = new XmlTextReader(s);Reader.MoveToContent();string strValue = Reader.ReadInnerXml();strValue = strValue.Replace("&lt;", "<");strValue = strValue.Replace("&gt;", ">");MessageBox.Show(strValue);Reader.Close();

(2)、Post方式调用:

string strURL = "http://localhost:12074/Service1.asmx/GetProductPrice";//创建一个HTTP请求HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strURL);//Post请求方式request.Method = "POST";//内容类型request.ContentType = "application/x-www-form-urlencoded";//参数经过URL编码string paraUrlCoded = HttpUtility.UrlEncode("ProductId");paraUrlCoded += "=" + HttpUtility.UrlEncode(this.textBox1.Text);byte[] payload;//将URL编码后的字符串转化为字节payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);//设置请求的ContentLengthrequest.ContentLength = payload.Length;//获得请求流Stream writer = request.GetRequestStream();//将请求参数写入流writer.Write(payload, 0, payload.Length);//关闭请求流writer.Close();//获得响应流HttpWebResponse response = (HttpWebResponse)request.GetResponse();Stream s = response.GetResponseStream();XmlTextReader Reader = new XmlTextReader(s);Reader.MoveToContent();string strValue = Reader.ReadInnerXml();strValue = strValue.Replace("&lt;", "<");strValue = strValue.Replace("&gt;", ">");MessageBox.Show(strValue);Reader.Close();

2、异步调用WebService

(1)、利用Backgroundworker对象实现。

/// <summary>/// 界面的进度条显示/// </summary>void ChangeProcessBar(){for (int i = 0; i < 10; i++){progressBar1.Value = i;System.Threading.Thread.Sleep(500);}}private void button1_Click(object sender, EventArgs e){BackgroundWorker backgroundworker = new BackgroundWorker();// 注册具体异步处理的方法backgroundworker.DoWork += new DoWorkEventHandler(back_DoWork);// 注册调用完成后的回调方法backgroundworker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(back_RunWorkerCompleted);// 这里开始异步调用backgroundworker.RunWorkerAsync();//调用服务的同时客户端处理并不停止ChangeProcessBar();}//完成事件void back_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e){if (e.Error != null)throw e.Error;progressBar1.Value = progressBar1.Maximum; //调用完成了,把客户端进度条填充满string price = e.Result.ToString(); //获取处理结果MessageBox.Show("调用完成。价格是:" + price); //显示从服务器获取的结果值}//调用方法void back_DoWork(object sender, DoWorkEventArgs e){//Web Service代理类ProductService.LTPService service = new ProductService.LTPService();// 调用Web方法GetProductPrice,结果赋值给DoWorkEventArgs的Result对象e.Result = service.GetProductPrice("001");}

(2)、利用WebService的webMethod中的Async方法实现。

private void button2_Click(object sender, EventArgs e){ProductService.LTPService service = new ProductService.LTPService();//Web Service代理类//这里开始异步调用service.GetProductPriceAsync("001");// 注册调用完成后的回调方法service.GetProductPriceCompleted += new ProductService.GetProductPriceCompletedEventHandler(GetProductPriceCompleted);//调用同时客户端处理不停止ChangeProcessBar();}//完成事件void GetProductPriceCompleted(object sender, ProductService.GetProductPriceCompletedEventArgs e){if (e.Error != null)throw e.Error;progressBar1.Value = progressBar1.Maximum; //调用完成了,把客户端进度条填充满string price = e.Result.ToString(); //获取处理结果MessageBox.Show("调用完成。价格是:" + price); //显示从服务器获取的结果值}