通过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[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所示。
图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(",") > -1) { 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地址查询功能的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持猪先飞。
相关文章
- 这篇文章主要介绍了Mybatis Plus select 实现只查询部分字段的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-01
- 这篇文章主要介绍了c# 三种方法调用WebService接口的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-07
MyBatisPlus-QueryWrapper多条件查询及修改方式
这篇文章主要介绍了MyBatisPlus-QueryWrapper多条件查询及修改方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2022-06-27- 这篇文章主要介绍了Oracle使用like查询时对下划线的处理方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-16
- 这篇文章主要介绍了解决mybatis-plus 查询耗时慢的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-07-04
- 这篇文章介绍了c#动态调用Webservice的两种方法实例,有需要的朋友可以参考一下...2020-06-25
- 这篇文章主要给大家介绍了关于c#中的WebService及其调用方式的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
- 如果需要在查询语句返回的列中包含一列表示该条记录在整个结果集中的行号, ISO SQL:2003 标准提出的方法是提供 ROW_NUMBER() / RANK() 函数。 Oracle 中可以使用标准方法(8i版本以上),也可以使用非标准的 ROWNUM ; MS SQL...2015-03-15
- 这篇文章主要为大家详细介绍了Node实现搜索框进行模糊查询,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-06-28
- 这篇文章主要介绍了Mybatis用注解写in查询的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-07-13
PHP+Mysql+jQuery查询和列表框选择操作实例讲解
本文讲解如何通过ajax查询mysql数据,并将返回的数据显示在待选列表中,再通过选择最终将选项加入到已选区,可以用在许多后台管理系统中。本文列表框的操作依赖jquery插件。HTML <form id="sel_form" action="post.php" me...2015-10-23Element-ui 自带的两种远程搜索(模糊查询)用法讲解
这篇文章主要介绍了Element-ui 自带的两种远程搜索(模糊查询)用法讲解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-29- 这篇文章主要介绍了Mybatis和Mybatis-Plus时间范围查询方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-08-06
- MySQL提供标准的SQL模式匹配,以及一种基于象Unix实用程序如vi、grep和sed的扩展正则表达式模式匹配的格式 一、SQL模式SQL的模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零个字符)。在 MySQL...2013-10-04
JPA如何使用nativequery多表关联查询返回自定义实体类
这篇文章主要介绍了JPA如何使用nativequery多表关联查询返回自定义实体类,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-11-18- 这篇文章主要介绍了Select下拉框模糊查询功能实现代码的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2016-07-29
- 这篇文章主要介绍了C#百万数据查询出现超时问题的解决方法,是非常实用的技巧,需要的朋友可以参考下...2020-06-25
- 方法一:直接调用复制代码 代码如下:<? /******************************************************************************/ /* 文件名 : soapclient.php /* 说 明 : WebService接口客户端例程 /****************...2014-06-07
- 这篇文章主要介绍了postgresql的jsonb数据查询和修改的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-03
- 这篇文章主要为大家详细介绍了C# 创建、部署和调用WebService的简单示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25