现在的位置: 首页 > 综合 > 正文

webservice的创建、发布及调用示例(以调用自己发布的webservice和中国气象局提供的webservice为例)

2012年12月18日 ⁄ 综合 ⁄ 共 3823字 ⁄ 字号 评论关闭
        webservice(web服务)的存在让我们可以利用网络发布和调用远程的API接口,实现编程的需要,例如,中国气象局向外提供了一个webservice,该服务中包含了获取各大城市的天气情况的API接口,这时如果我们想要在本机上编写代码获取城市的天气情况,就不用自己编写API了(这种API估计也不可能写出来,因为天气情况的数据库一般只有气象局才有),可以通过远程调用气象局对外提供的webservice API 就可以轻松获得天气情况了。

        相信通过上面的描述,你已经大概知道了什么是webservice,其实webservice通俗一点讲就是某个人或机构写的类,类中含有实现特定意义的函数(方法),但是这个类是不同于一般类的,不同之处在于这个类要通过网络访问。
        好,话不多说,进入正题。。。。。
        
        一、webservice的创建
        为简单起见,我们创建的webservice非常简单,只提供了一个返回长方体体积的一个函数,函数不在复杂,能说明原理就可以。下面为其创建过程:
        
        1,打开vs2005,新建一ASP.NET Web 服务应用程序
        2,在Service1.axmx.cs文件中写代码,这里要注意的就是对外提供的方法,一定要是public的,而且要加上WebMethod标签,切记,否则对外是看不到这个方法的。
using System;
using System.Data;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.ComponentModel;

namespace myWebService
{
    
/// <summary>
    
/// Service1 的摘要说明
    
/// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo 
= WsiProfiles.BasicProfile1_1)]
    [ToolboxItem(
false)]
    
public class Service1 : System.Web.Services.WebService
    {

        //[WebMethod]
        
//public string HelloWorld()
        
//{
        
//    return "Hello World";
        
//}

        [WebMethod(Description 
= "这是一个用来计算长方体体积的webservice")]//注意这里一定要带上WebMethod标签,而且是public的才能对外提供方法,Description属性是对该方法的描述文字,可以不要。
        public double getVolume(double length, double width, double height)
        {
            
return getArea(length, width) * height;
        }

        [WebMethod(Description = "这是一个用来计算长方形面积的webservice")]//由于私有的方法是不会对外提供的,所以这里的WebMethod标签可以不写。
        private double getArea(double len, double wid)
        {
            
return len * wid;
        }
    }
}

        3,此时浏览这个webservice页面,可以看到该服务对外提供的方法,只有类型为public,并且加上了webmethod标签的方法才会在这个页面显示。
        到这里,webservice的创建工作已经完成,接下来就是发布webservice了。
        二、发布webservice
        你可以把webser发布到http,ftp或者磁盘路径,具体的发布方法入下:
        1,右击项目,选择“发布……”
        2,选择好路径后就算是发布成功了,我这里是发布在本机,以本机作为服务器。
        3,其实在我们创建完webservice并运行其之后,webservice已经完成了发布工作,发布的网址就是运行页面中看到的网址:http://localhost:1230/Service1.asmx。。。
        三、调用webservice
        这里分两种webservice的调用,其一是我们刚写好的webservice的调用,其二是调用中央气象局给我们提供的webservice,从而实现查询“长沙”的天气情况。
        (一)调用自己刚写好的webservice
        1,新建一windows应用程序,其实新建一ASP.NET应用程序的调用方法也是一样的,这里选择建立以桌面程序。
        2,右击该项目,选择“添加web引用……”
        3,添加webservice的地址,选择“前往”,可以看到webservice提供的方法名和描述,然后“添加该引用”
        这一步完成了webservice的引用,可以看到项目中多了一个名为“localhost”的web reference,这有点类似于本地组件的调用,不同点在于它是基于网络的。
        4,布局好form1,设置如下
        5,在btnVolume的Click事件中添加代码如下
private void btnVolume_Click(object sender, EventArgs e)
        {
            
double len = double.Parse(txtLength.Text.ToString());
            
double wid = double.Parse(txtWidth.Text.ToString());
            
double hei = double.Parse(txtHeight.Text.ToString());

            localhost.Service1 ser = new Test.localhost.Service1();//实例化service1
            double vol = ser.getVolume(len, wid, hei);//调用service1的方法

            MessageBox.Show(
"长方体的体积为:"+vol.ToString());
        }

        6,编译完成,执行结果如下:
        到这里一个webservice的调用就完成了,和本地的组件的调用相比,其调用速度上要慢些,这主要限制于服务器的网络传输速度。。。
        (二)调用中央气象局提供的webservice实现天气的查询
        中央气象局提供的webservice地址为:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx 知道这个网址后,我们就可以调用其对外提供的方法,实现自己查询城市天气的目的。
        1,新建一windows应用程序,名为“WeatherReport”,设置form1的布局如下:
        2,在此项目中添加web引用,地址为http://www.webxml.com.cn/WebServices/WeatherWebService.asmx
        3,在btngetWeather的Click事件中添加如下代码:
private void btngetWeather_Click(object sender, EventArgs e)
        {
            WeatherReport.cn.com.webxml.www.WeatherWebService wws 
= new WeatherWebService();
            
string[] weather = wws.getWeatherbyCityName(txtCity.Text.ToString());
            
for (int i = 0; i < weather.Length; i++)
            {
                txtWeather.Text 
+= System.Environment.NewLine;
                txtWeather.Text 
+= weather[i].ToString();
            }
        }
        4,调用过程完成,执行该程序查询长沙的天气情况
        程序运行成功,说明调用webservice的方法成功了。

抱歉!评论已关闭.