atlas学习实践系列之三(远程web services调用)

原文链接:http://www.cnblogs.com/jillzhang/archive/2006/08/22/483020.html

上篇地址:atlas学习实践系列之二(AutoCompleteExtender篇)
atlas调用本地web services那是相当的简单,调用远程的也不难,看了dflying chen的几篇文章也学了不少内容,尤其是yahoo天气预报的例子更是受益匪浅。自己动手实践一把。
目标:实现IP地址查询功能.输入IP地址,获得该IP所在的国家和城市。
难点:1)如何设置调用远程服务的asbx文件(有关配置支持asbx的方法可以见dflying chen 的介绍)
难点2):如何动态获得请求的客户端IP,然后在js中使用。
首先,建立一个网络服务,用于查询IP,IP地址信息库是一个mdb文件,相关代码为:

atlas学习实践系列之三(远程web services调用)atlas学习实践系列之三(远程web services调用)
 1atlas学习实践系列之三(远程web services调用)using System;
 2atlas学习实践系列之三(远程web services调用)using System.Web;
 3atlas学习实践系列之三(远程web services调用)using System.Web.Services;
 4atlas学习实践系列之三(远程web services调用)using System.Web.Services.Protocols;
 5atlas学习实践系列之三(远程web services调用)using System.Data;
 6atlas学习实践系列之三(远程web services调用)using System.Data.OleDb;
 7atlas学习实践系列之三(远程web services调用)
 8atlas学习实践系列之三(远程web services调用)[WebService(Namespace = "http://tempuri.org/")]
 9atlas学习实践系列之三(远程web services调用)[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
10atlas学习实践系列之三(远程web services调用)public class Service : System.Web.Services.WebService
11atlas学习实践系列之三(远程web services调用)atlas学习实践系列之三(远程web services调用)atlas学习实践系列之三(远程web services调用){
12atlas学习实践系列之三(远程web services调用)atlas学习实践系列之三(远程web services调用)    public Service () atlas学习实践系列之三(远程web services调用){
13atlas学习实践系列之三(远程web services调用)
14atlas学习实践系列之三(远程web services调用)        //如果使用设计的组件,请取消注释以下行 
15atlas学习实践系列之三(远程web services调用)        //InitializeComponent(); 
16atlas学习实践系列之三(远程web services调用)    }
17atlas学习实践系列之三(远程web services调用)    [WebMethod]
18atlas学习实践系列之三(远程web services调用)    public string[] GetIPAddress(string ip)
19atlas学习实践系列之三(远程web services调用)atlas学习实践系列之三(远程web services调用)    atlas学习实践系列之三(远程web services调用){
20atlas学习实践系列之三(远程web services调用)        //数据库文件物理路径
21atlas学习实践系列之三(远程web services调用)        string dbFilePath = Server.MapPath("~/App_Data/IPaddress.mdb");
22atlas学习实践系列之三(远程web services调用)        //数据库连接字符串
23atlas学习实践系列之三(远程web services调用)        string conStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + dbFilePath;
24atlas学习实践系列之三(远程web services调用)        string country = "未知";
25atlas学习实践系列之三(远程web services调用)        string city = "未知";
26atlas学习实践系列之三(远程web services调用)        //数据库连接
27atlas学习实践系列之三(远程web services调用)        OleDbConnection con = new OleDbConnection(conStr);
28atlas学习实践系列之三(远程web services调用)        try
29atlas学习实践系列之三(远程web services调用)atlas学习实践系列之三(远程web services调用)        atlas学习实践系列之三(远程web services调用){
30atlas学习实践系列之三(远程web services调用)            long ipAddress = System.Net.IPAddress.Parse(ip).Address;
31atlas学习实践系列之三(远程web services调用)            string cmdText = " select top 1 * from dv_address where ip1 <= " + ipAddress + " and ip2 >= " + ipAddress;
32atlas学习实践系列之三(远程web services调用)            con.Open();
33atlas学习实践系列之三(远程web services调用)            OleDbCommand cmd = new OleDbCommand(cmdText, con);
34atlas学习实践系列之三(远程web services调用)            OleDbDataReader dr = cmd.ExecuteReader();
35atlas学习实践系列之三(远程web services调用)            if (dr.Read())
36atlas学习实践系列之三(远程web services调用)atlas学习实践系列之三(远程web services调用)            atlas学习实践系列之三(远程web services调用){
37atlas学习实践系列之三(远程web services调用)                country = dr["country"].ToString();
38atlas学习实践系列之三(远程web services调用)                city = dr["city"].ToString();
39atlas学习实践系列之三(远程web services调用)            }
40atlas学习实践系列之三(远程web services调用)        }
41atlas学习实践系列之三(远程web services调用)        catch
42atlas学习实践系列之三(远程web services调用)atlas学习实践系列之三(远程web services调用)        atlas学习实践系列之三(远程web services调用){
43atlas学习实践系列之三(远程web services调用)atlas学习实践系列之三(远程web services调用)            return new string[] atlas学习实践系列之三(远程web services调用){ country, city };
44atlas学习实践系列之三(远程web services调用)        }
45atlas学习实践系列之三(远程web services调用)        finally
46atlas学习实践系列之三(远程web services调用)atlas学习实践系列之三(远程web services调用)        atlas学习实践系列之三(远程web services调用){
47atlas学习实践系列之三(远程web services调用)            con.Close();
48atlas学习实践系列之三(远程web services调用)        }
49atlas学习实践系列之三(远程web services调用)atlas学习实践系列之三(远程web services调用)        return new string[] atlas学习实践系列之三(远程web services调用){ country, city };
50atlas学习实践系列之三(远程web services调用)    } 
51atlas学习实践系列之三(远程web services调用)     
52atlas学习实践系列之三(远程web services调用)    
53atlas学习实践系列之三(远程web services调用)}
54atlas学习实践系列之三(远程web services调用)

注意,该web services必须支持HTTP-Get方式访问,故需要如下web.config配置

atlas学习实践系列之三(远程web services调用)<system.web>
atlas学习实践系列之三(远程web services调用)    <webServices>
atlas学习实践系列之三(远程web services调用)      <protocols>
atlas学习实践系列之三(远程web services调用)        <add name="HttpPost"/>
atlas学习实践系列之三(远程web services调用)        <add name="HttpGet"/>
atlas学习实践系列之三(远程web services调用)      </protocols>
atlas学习实践系列之三(远程web services调用)    </webServices>
atlas学习实践系列之三(远程web services调用)</system.web>

网络服务建好了,下面就是调用了。
建立一个新的网站,首先建立一个IPServices.asbx文件,该文件是将远程服务映射到本地的配置文件,有关信息见dflying chen的文章。文件内容如下:

atlas学习实践系列之三(远程web services调用)atlas学习实践系列之三(远程web services调用)asbx配置文件
 1atlas学习实践系列之三(远程web services调用)<?xml version="1.0" encoding="utf-8"?>
 2atlas学习实践系列之三(远程web services调用)<bridge namespace="n2dog" className="IpServices">
 3atlas学习实践系列之三(远程web services调用)  <proxy type="Microsoft.Web.Services.BridgeRestProxy" serviceUrl="http://127.0.0.1/IPServices/Service.asmx/GetIPAddress"></proxy>
 4atlas学习实践系列之三(远程web services调用)  <method name="GetIPAddress">
 5atlas学习实践系列之三(远程web services调用)    <input>
 6atlas学习实践系列之三(远程web services调用)      <parameter name="ip"></parameter>     
 7atlas学习实践系列之三(远程web services调用)    </input>
 8atlas学习实践系列之三(远程web services调用)  </method>
 9atlas学习实践系列之三(远程web services调用)
10atlas学习实践系列之三(远程web services调用)</bridge>
11atlas学习实践系列之三(远程web services调用)
12atlas学习实践系列之三(远程web services调用)

调用页面为:

atlas学习实践系列之三(远程web services调用)atlas学习实践系列之三(远程web services调用)页面前台
 1atlas学习实践系列之三(远程web services调用)atlas学习实践系列之三(远程web services调用)<%atlas学习实践系列之三(远程web services调用)@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
 2atlas学习实践系列之三(远程web services调用)
 3atlas学习实践系列之三(远程web services调用)<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
 4atlas学习实践系列之三(远程web services调用)<html xmlns="http://www.w3.org/1999/xhtml">
 5atlas学习实践系列之三(远程web services调用)<head runat="server">
 6atlas学习实践系列之三(远程web services调用)    <title>Untitled Page</title>
 7atlas学习实践系列之三(远程web services调用)atlas学习实践系列之三(远程web services调用)    <script language="javascript" type="text/javascript">atlas学习实践系列之三(远程web services调用)
 8atlas学习实践系列之三(远程web services调用)    
 9atlas学习实践系列之三(远程web services调用)       function onGetCompleted(result)
10atlas学习实践系列之三(远程web services调用)atlas学习实践系列之三(远程web services调用)       atlas学习实践系列之三(远程web services调用){        
11atlas学习实践系列之三(远程web services调用)          $('country').innerHTML = '您的位置:'+result;         
12atlas学习实践系列之三(远程web services调用)       }
13atlas学习实践系列之三(远程web services调用)    </script>
14atlas学习实践系列之三(远程web services调用)</head>
15atlas学习实践系列之三(远程web services调用)<body>
16atlas学习实践系列之三(远程web services调用)    <form id="form1" runat="server">
17atlas学习实践系列之三(远程web services调用)        <atlas:ScriptManager ID="ScriptManager1" runat="server">
18atlas学习实践系列之三(远程web services调用)           <Services>
19atlas学习实践系列之三(远程web services调用)              <atlas:ServiceReference Path="IPServices.asbx" />
20atlas学习实践系列之三(远程web services调用)           </Services>
21atlas学习实践系列之三(远程web services调用)        </atlas:ScriptManager>
22atlas学习实践系列之三(远程web services调用)        <div>
23atlas学习实践系列之三(远程web services调用)            <input id="Button1" type="button" value="button" onclick="getIpAddress()" /><div id="country"></div>            
24atlas学习实践系列之三(远程web services调用)        </div>
25atlas学习实践系列之三(远程web services调用)    </form>
26atlas学习实践系列之三(远程web services调用)
27atlas学习实践系列之三(远程web services调用)atlas学习实践系列之三(远程web services调用)    <script type="text/xml-script">atlas学习实践系列之三(远程web services调用)
28atlas学习实践系列之三(远程web services调用)        <page xmlns:script="http://schemas.microsoft.com/xml-script/2005">
29atlas学习实践系列之三(远程web services调用)            <references>
30atlas学习实践系列之三(远程web services调用)            </references>
31atlas学习实践系列之三(远程web services调用)            <components>
32atlas学习实践系列之三(远程web services调用)            </components>
33atlas学习实践系列之三(远程web services调用)        </page>
34atlas学习实践系列之三(远程web services调用)    </script>
35atlas学习实践系列之三(远程web services调用)</body>
36atlas学习实践系列之三(远程web services调用)</html>
37atlas学习实践系列之三(远程web services调用)

因为javscript不容易获得本机IP地址,故在后台注册了脚本,解决第二个难点问题 :后台代码

 1atlas学习实践系列之三(远程web services调用)using System;
 2atlas学习实践系列之三(远程web services调用)using System.Data;
 3atlas学习实践系列之三(远程web services调用)using System.Configuration;
 4atlas学习实践系列之三(远程web services调用)using System.Web;
 5atlas学习实践系列之三(远程web services调用)using System.Web.Security;
 6atlas学习实践系列之三(远程web services调用)using System.Web.UI;
 7atlas学习实践系列之三(远程web services调用)using System.Web.UI.WebControls;
 8atlas学习实践系列之三(远程web services调用)using System.Web.UI.WebControls.WebParts;
 9atlas学习实践系列之三(远程web services调用)using System.Web.UI.HtmlControls;
10atlas学习实践系列之三(远程web services调用)using System.Text;
11atlas学习实践系列之三(远程web services调用)
12atlas学习实践系列之三(远程web services调用)public partial class _Default : System.Web.UI.Page 
13atlas学习实践系列之三(远程web services调用)atlas学习实践系列之三(远程web services调用)atlas学习实践系列之三(远程web services调用){
14atlas学习实践系列之三(远程web services调用)    protected void Page_Load(object sender, EventArgs e)
15atlas学习实践系列之三(远程web services调用)atlas学习实践系列之三(远程web services调用)    atlas学习实践系列之三(远程web services调用){
16atlas学习实践系列之三(远程web services调用)        StringBuilder sb = new StringBuilder();
17atlas学习实践系列之三(远程web services调用)        string ip = Request.UserHostAddress;
18atlas学习实践系列之三(远程web services调用)        sb.Append("<script language=\"javascript\" type=\"text/javascript\">");
19atlas学习实践系列之三(远程web services调用)        sb.Append(" function getIpAddress(){var ip='"+ip+"';n2dog.IpServices.GetIPAddress({'ip':ip},onGetCompleted);}");
20atlas学习实践系列之三(远程web services调用)        sb.Append("</script>");
21atlas学习实践系列之三(远程web services调用)        string script = sb.ToString();        
22atlas学习实践系列之三(远程web services调用)        Page.RegisterClientScriptBlock("IpServices", script);
23atlas学习实践系列之三(远程web services调用)
24atlas学习实践系列之三(远程web services调用)    }
25atlas学习实践系列之三(远程web services调用)}

这样目标即可实现,效果图:
上篇地址:atlas学习实践系列之二(AutoCompleteExtender篇)
再次感谢dflying chen的系列文章对我的启发和指导。

转载于:https://www.cnblogs.com/jillzhang/archive/2006/08/22/483020.html

上一篇:Introduction to Quantitative Research Methods (PUBL0055)


下一篇:函数的返回值与作用域