通过Web Service实现IP地址查询功能
实例01 实现一个简单的Web服务访问
本实例将实现IP地址查询接口服务,根据用户传入的IP地址返回IP所在的省、市、地区,实例中将会用到IP地址库用于查询信息,由于数据较多,所以读者可在光盘资源文件中直接附加数据库文件,这里将不再介绍导入数据的过程。
程序实现步骤如下:
(1)打开Visual Studio 2017开发环境,然后依次点击文件→新建→项目,在弹出的新建项目对话框中选择“ASP.NET Web应用程序”选项,然后更改项目名称和项目路径,如图12.1所示。

图12.1 新建ASP.NET Web应用程序
(2)单击“确定”按钮,将弹出选择项目类型对话框,在该对话框中可选择Web Forms或MVC等项目类型,这里选择“Empty”空项目类型,然后点击确定按钮,如图12.2所示。

图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[]) << | long.Parse(items[]) <<
| long.Parse(items[]) << | long.Parse(items[]);
}
catch
{
return ;//如果发生异常则返回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[];//返回查询的数据表
if (dt.Rows.Count > ) //判断如果数据总数大于0
{
string Province = (string)dt.Rows[]["Province"];//获取省
string City = (string)dt.Rows[]["City"]; //获取市
return ip + ","+Province + "," + City; //将ip地址与省和市拼接然后返回
}
return"未找到IP地址所对应的地区信息"; //返回无数据信息
}
代码完成之后,接下就是调用这个服务,首先运行这个服务页面,这与运行Web页面相同,在弹出来的网页中包含了对于这个服务页面的说明,其中页面上有两个可点击的连接,该连接对应的是服务中定义的方法名称,一个是刚才定义GetIPToArea方法,并且带有方法描述信息,另一个则是创建服务页面时自动生成的测试方法,这里直接点击GetIPToArea方法连接,如图12.3所示。

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

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

图12.5 GetIPToArea方法返回的结果页面
从上面的测试结果可以看出,Web服务的方法的返回结果是使用XML进行编码的。
实例02 实现局域网内的Web服务访问
在本地环境下可通过将Web服务发布到IIS中,在进行调用者的访问。本实例将实现如何在本地环境下进行调用Web服务。
(1)首先打开IIS管理工具,在IIS管理工具中“网站”的节点下创建一个网站,目录指定已经编写好的Web服务应用程序文件夹,然后命名网站名称并分配IP地址和端口号。这个过程同创建网站站点相同,最后点击“确定”按钮完成创建,如图12.6所示。

图12.6 发布Web服务到IIS
图12.6中创建的Web服务站点指定目录为实例01中创建的的Web服务引用程序,所以接下来在创建一个网站程序用于调用Web服务,该过程主要演示如何添加“服务引用”的操作。
(2)首先新建一个网站并创建Default.aspx页面,在页面中添加一个TextBox控件、一个Button控件和两个Label控件,分别用来输入IP地址、执行查询操作和显示结果信息。
(3)在项目上单击鼠标右键,在弹出的快捷菜单中选择“添加”→“服务引用”选项,弹出“添加服务引用”对话框,如图12.7所示。

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

图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(",") > -)
{
Result = Result.Replace(",", "<br/>");
}
this.Label1.Text = "以下为输出IP、省、市的结果:";
this.Label2.Text = Result;
}
运行Default.aspx页面,在文本框中输入一个有效的IP地址,然后点击“查询IP地址”按钮,页面将会输出查询到的结果信息,如图12.9所示。

图12.9 调用Web服务结果
本文摘自明日科技出版的《零基础学ASP.NET》,转载请注明出处!!!
通过Web Service实现IP地址查询功能的更多相关文章
- [1]IP地址查询
今天起开始玩百度APIStore里面的免费API.以前用过的有12306的:数据.接口,有时间整理出来,12306的有点乱就是了.还有扇贝以及有道的API,之前用在留言板里自动翻译,公司用过百度地图以 ...
- Android中由IP地址查询经纬度坐标的实例
大家都知道,根据IP地址就可以知道它所在的具体位置,在Android中同样可以由IP地址得到它的位置,即具体的地理经纬度坐标. 本文就直接以代码的方式演示如何根据IP地址查询地理经纬度坐标位置,下面的 ...
- 分享几个免费IP地址查询API接口
几个免费IP地址查询API接口 1.IP地址查询接口:http://apis.juhe.cn/ip/ip2addr要先去https://www.juhe.cn/docs/api/...申请APPKEY ...
- ip地址查询python3小工具_V0.0.1
看到同事在一个一个IP地址的百度来确认导出表格中的ip地址所对应的现实世界的地址是否正确,决定给自己新开一个坑.做一个查询ip“地址”的python小工具,读取Excel表格,在表格中的后续列输出尽可 ...
- IP地址查询接口及调用方法
1.查询地址 搜狐IP地址查询接口(IP):http://pv.sohu.com/cityjson 1616 IP地址查询接口(IP+地址):http://w.1616.net/chaxun/ipto ...
- IP地址查询接口
新浪的IP地址查询接口:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js 新浪多地域测试方法:http://int.dpool. ...
- 根据IP地址查询所在地
using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Tex ...
- 齐全的IP地址查询接口及调用方法(转)
设计蜂巢IP地址查询接口:http://www.hujuntao.com/api/ip/ip.php 腾讯IP地址查询接口:http://fw.qq.com/ipaddress 新浪IP地址查询接口: ...
- API之IP地址查询---权威的IP地址查询接口集合
原文地址:http://yushine.iteye.com/blog/1717586 推荐实用IP138 http://www.baidu.com/s?wd=IP&rsv_spt=1& ...
随机推荐
- Mybatis操作Mysql批量更新的一个坑-&allowMultiQueries=true允许批量更新
前言 利用Mybatis批量更新或者批量插入,实际上即使Mybatis完美支持你的sql,你也得看看你操作的数据库是否完全支持,而同事,最近就遇到这样的一个坑! 问题 先带大家来 ...
- 《零压力学Python》 之 第四章知识点归纳
第四章(决策和循环)知识点归纳 if condition: indented_statements [ elif condition: Indented_statements] [else: Inde ...
- linux获得网卡信息
#define MAX_INTERFACE 64 int showifs() { int i; int rc; int sock; int ifnum; struct ifreq ifr[MAX_IN ...
- PAT 1108 Finding Average
The basic task is simple: given N real numbers, you are supposed to calculate their average. But wha ...
- fastclick:处理移动端click事件300毫秒延迟
fastclick:处理移动端click事件300毫秒延迟 1.兼容性 iOS 3及更高版本的移动Safari iOS 5及更高版本的Chrome Android上的Chrome(ICS) Opera ...
- Android音乐、视频类APP常用控件:DraggablePanel(2)
Android音乐.视频类APP常用控件:DraggablePanel(2) 附录文章1主要演示了如何使用DraggablePanel 的DraggableView.DraggablePanel ...
- 洛谷 P1972 BZOJ 1878 [SDOI2009]HH的项链
题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不断地收集新的贝壳,因此,他的项链变得越来越长. ...
- RestEasy 用户指南----第7章 @HeaderParam
转载说明出处:http://blog.csdn.net/nndtdx/article/details/6870391 原文地址 http://docs.jboss.org/resteasy/docs/ ...
- 【学QT】2 - QT/E环境的建立
Arm-Linux嵌入式QT/E环境的建立(qt/e 3.x系列) QT/E 3.x系列比QT/E 2.x系列有非常大的改进,大大提高了开发进度,不再使用tmake,安装也更简单.但 ...
- 20180629利用powerdesigner生成数据字典
原创作品,如有错误,请批评指正 第一步新建一个PDM模型 第二步 点击“FILE”--->"RESERVER ENGINEER"--->"DATABASE&q ...