欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

通过Web Service实现IP地址查询功能的示例

程序员文章站 2022-07-05 20:30:22
实例01 实现一个简单的web服务访问 本实例将实现ip地址查询接口服务,根据用户传入的ip地址返回ip所在的省、市、地区,实例中将会用到ip地址库用于查询信息,由于数据...

实例01 实现一个简单的web服务访问

本实例将实现ip地址查询接口服务,根据用户传入的ip地址返回ip所在的省、市、地区,实例中将会用到ip地址库用于查询信息,由于数据较多,所以读者可在光盘资源文件中直接附加数据库文件,这里将不再介绍导入数据的过程。

程序实现步骤如下:

(1)打开visual studio 2017开发环境,然后依次点击文件→新建→项目,在弹出的新建项目对话框中选择“asp.net web应用程序”选项,然后更改项目名称和项目路径,如图12.1所示。

通过Web Service实现IP地址查询功能的示例

图12.1 新建asp.net web应用程序

(2)单击“确定”按钮,将弹出选择项目类型对话框,在该对话框中可选择web forms或mvc等项目类型,这里选择“empty”空项目类型,然后点击确定按钮,如图12.2所示。

通过Web Service实现IP地址查询功能的示例

图12.2 创建空项目

(3)ip地址查询功能的条件属于ip地址段范围查找,所以在进行筛选时通常要将ip地址转换成int类型,这样做是方便于数据的范围筛选,所以接下来定义ip地址的数据类型转换方法,代码如下:

privatelong iptonumber(string ip)//定义ip转int方法,参数ip为用户要查询的ip地址
  {
 try
  {
 char[] separator = newchar[] { '.' };//定义char类型的分割数组
 string[] items = ip.split(separator); //将ip字符串以“.”进行分割并返回数组
 //将ip地址的每一段拆分成二进制形式,然后再将二进制转换成无符号的32位整数
 returnlong.parse(items[0]) << 24 | long.parse(items[1]) << 16 
 | long.parse(items[2]) << 8 | long.parse(items[3]);
  }
 catch
  {
 return 0;//如果发生异常则返回0
  }
  }

(4)接着定义获取ip地址的公开方法,该方法将带有一个字符串类型的参数,参数表示用户要查询地区的ip地址,代码如下:

[webmethod(description = "ip地址归属地查询")]
 publicstringgetiptoarea (string ip)
 {
 long ip = iptonumber(ip);//传入string类型的ip地址,返回long类型的ip地址
 //创建数据库连接对象
 sqlconnection conn = 
 newsqlconnection("server=127.0.0.1;database=school;uid=sa;pwd=123456");
  conn.open();    //打开数据库
 dataset ds = newdataset(); //定义dataset
 //创建数据适配器
 sqldataadapter sda = 
 newsqldataadapter("select * from ipaddress where ip1<=" + ip + " and ip2>=" + ip, conn);
  sda.fill(ds);    //填充dataset
  conn.dispose();    //释放数据库使用资源
 datatable dt = ds.tables[0];//返回查询的数据表
 if (dt.rows.count > 0)  //判断如果数据总数大于0
  {
 string province = (string)dt.rows[0]["province"];//获取省
 string city = (string)dt.rows[0]["city"];  //获取市
 return ip + ","+province + "," + city;   //将ip地址与省和市拼接然后返回
  }
 return"未找到ip地址所对应的地区信息";    //返回无数据信息
  }

代码完成之后,接下就是调用这个服务,首先运行这个服务页面,这与运行web页面相同,在弹出来的网页中包含了对于这个服务页面的说明,其中页面上有两个可点击的连接,该连接对应的是服务中定义的方法名称,一个是刚才定义getiptoarea方法,并且带有方法描述信息,另一个则是创建服务页面时自动生成的测试方法,这里直接点击getiptoarea方法连接,如图12.3所示。

通过Web Service实现IP地址查询功能的示例

图12.3 web服务帮助页面

点击之后页面会跳转到可对该方法执行调用的页面,这个页面帮助我们可以很方便的测试创建的服务。在页面上有一个文本框用于输入方法的参数值,并且下面还有一个“调用”按钮,当用户输入完参数值后,点击“调用”按钮即可执行服务程序然后等待返回结果,如图12.4所示。

通过Web Service实现IP地址查询功能的示例

图12.4 web服务调用页面

最后调用结果将会以弹出新的窗口来显示,如图12.5所示。

通过Web Service实现IP地址查询功能的示例

图12.5 getiptoarea方法返回的结果页面

从上面的测试结果可以看出,web服务的方法的返回结果是使用xml进行编码的。

实例02 实现局域网内的web服务访问

在本地环境下可通过将web服务发布到iis中,在进行调用者的访问。本实例将实现如何在本地环境下进行调用web服务。

(1)首先打开iis管理工具,在iis管理工具中“网站”的节点下创建一个网站,目录指定已经编写好的web服务应用程序文件夹,然后命名网站名称并分配ip地址和端口号。这个过程同创建网站站点相同,最后点击“确定”按钮完成创建,如图12.6所示。

通过Web Service实现IP地址查询功能的示例

图12.6 发布web服务到iis

图12.6中创建的web服务站点指定目录为实例01中创建的的web服务引用程序,所以接下来在创建一个网站程序用于调用web服务,该过程主要演示如何添加“服务引用”的操作。

(2)首先新建一个网站并创建default.aspx页面,在页面中添加一个textbox控件、一个button控件和两个label控件,分别用来输入ip地址、执行查询操作和显示结果信息。

(3)在项目上单击鼠标右键,在弹出的快捷菜单中选择“添加”→“服务引用”选项,弹出“添加服务引用”对话框,如图12.7所示。

通过Web Service实现IP地址查询功能的示例

图12.7 “添加服务引用”对话框

(4)引用添加完成之后,将在“解决方案资源管理器”中添加一个名为app_webreferences的目录,在该目录中将显示命名空间为servicereference1的服务,如图12.8所示。

通过Web Service实现IP地址查询功能的示例

图12.8 添加的servicereference1服务

(5)在default.aspx页的“查询ip地址”按钮控件的click事件中,通过调用服务对象的getiptoarea方法查询信息,代码如下:

protectedvoid button1_click(object sender, eventargs e)
  {
   servicereference1.webservice1soapclient webservice1soapclient = 
 new servicereference1.webservice1soapclient();
 string result = webservice1soapclient.getiptoarea(this.textbox1.text);
 while (result.indexof(",") > -1)
   {
    result = result.replace(",", "<br/>");
   }
 this.label1.text = "以下为输出ip、省、市的结果:";
 this.label2.text = result;
 }

运行default.aspx页面,在文本框中输入一个有效的ip地址,然后点击“查询ip地址”按钮,页面将会输出查询到的结果信息,如图12.9所示。

通过Web Service实现IP地址查询功能的示例

图12.9 调用web服务结果

本文摘自明日科技出版的《零基础学asp.net》

以上这篇通过web service实现ip地址查询功能的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。