Windows Phone调用Web Service

转自:Windows Phone开发(47):轻松调用Web Service

众所周知(除了没用过VS的),在VS里面调用Web Service是一件很愉快的事情,不解释,相信很多朋友在以前的项目中肯定也用过WEB服务。同样,在WP中调用Web Service也是非常简单的,你可以不信,反正我绝对信了。

 

有例子有真相,我们就以http://webservice.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx

为例,这个Web服务可以根据IP地址查询相关的地区/城市信息,我们就通过调用这WEB服务,来比较一下,在WP项目调用Web Service与我们以前做过的其它类型到底有没有区别。

 

1、启动VS,新建一个WP应用程序项目(此处省略46个字)。

2、页面布局就参考下面XAML吧。

[html]  view plain copy print ?
  1. <phone:PhoneApplicationPage   
  2.     x:Class="MyApp.MainPage"  
  3.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
  4.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
  5.     xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"  
  6.     xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"  
  7.     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"  
  8.     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"  
  9.     mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"  
  10.     FontFamily="{StaticResource PhoneFontFamilyNormal}"  
  11.     FontSize="{StaticResource PhoneFontSizeNormal}"  
  12.     Foreground="{StaticResource PhoneForegroundBrush}"  
  13.     SupportedOrientations="Portrait" Orientation="Portrait"  
  14.     shell:SystemTray.IsVisible="True">  
  15.   
  16.     <!--LayoutRoot 是包含所有页面内容的根网格-->  
  17.     <Grid x:Name="LayoutRoot" Background="Transparent">  
  18.         <Grid.RowDefinitions>  
  19.             <RowDefinition Height="Auto"/>  
  20.             <RowDefinition Height="*"/>  
  21.         </Grid.RowDefinitions>  
  22.   
  23.         <!--TitlePanel 包含应用程序的名称和页标题-->  
  24.         <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">  
  25.             <TextBlock x:Name="ApplicationTitle" Text="我的应用程序" Style="{StaticResource PhoneTextNormalStyle}"/>  
  26.             <TextBlock x:Name="PageTitle" Text="页面名称" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>  
  27.         </StackPanel>  
  28.   
  29.         <!--ContentPanel - 在此处放置其他内容-->  
  30.         <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">  
  31.             <Grid.RowDefinitions>  
  32.                 <RowDefinition Height="auto"/>  
  33.                 <RowDefinition Height="*"/>  
  34.             </Grid.RowDefinitions>  
  35.             <Grid Grid.Row="0">  
  36.                 <Grid.ColumnDefinitions>  
  37.                     <ColumnDefinition Width="auto"/>  
  38.                     <ColumnDefinition Width="*"/>  
  39.                     <ColumnDefinition Width="auto"/>  
  40.                 </Grid.ColumnDefinitions>  
  41.                 <TextBlock Grid.Column="0" VerticalAlignment="Center" Text="IP地址:"/>  
  42.                 <TextBox Name="txtIP" Grid.Column="1"/>  
  43.                 <Button Grid.Column="2" Click="onQuery">  
  44.                     <Button.Content>  
  45.                         <Path Data="M0,10 L20,10 M5,0 L20,10 M5,20 L20,10"  
  46.                               VerticalAlignment="Stretch"  
  47.                               HorizontalAlignment="Stretch"  
  48.                               Stroke="White" StrokeThickness="3"/>  
  49.                     </Button.Content>  
  50.                 </Button>  
  51.             </Grid>  
  52.             <StackPanel Grid.Row="1">  
  53.                 <TextBlock Name="txbTip"/>  
  54.                 <TextBlock Name="txbResult" Margin="2,12,2,0" FontSize="32"/>  
  55.             </StackPanel>  
  56.         </Grid>  
  57.     </Grid>  
  58.    
  59.   
  60. </phone:PhoneApplicationPage>  


3、打开“解决方案资源管理器”,右击“引用”节点,从弹出的菜单中选择“添加服务引用”。

4、在弹出的对话框中,“地址”处输入上文中提到的Web服务的地址,并点击“前往”按钮,待发现WEB服务完成后,在“命名空间”处输入一个有效命名空间名字,随你喜欢。最后别忘了单击“确定”。

 

5、切换到后台代码,完成查询按钮的单击事件处理。

[csharp]  view plain copy print ?
  1. private void onQuery(object sender, RoutedEventArgs e)  
  2. {  
  3.     // 第一步,实例化客户端代理类  
  4.     IPQueryWebService.IpAddressSearchWebServiceSoapClient MyClient = new IPQueryWebService.IpAddressSearchWebServiceSoapClient();  
  5.     // 第二步,绑定回调事件  
  6.     MyClient.getCountryCityByIpCompleted += (s, arg) =>  
  7.         {  
  8.             // 取得结果  
  9.             txbTip.Text = "请求完成。";  
  10.             if (arg.Error != null)  
  11.             {  
  12.                 txtIP.Text = string.Format("错误:{0}", arg.Error.Message);  
  13.                 return;  
  14.             }  
  15.             string[] res = arg.Result;  
  16.             if (res != null)  
  17.             {  
  18.                 if (res.Length > 1)  
  19.                 {  
  20.                     txbResult.Text = string.Format("查询结果:{0}", res[1]);  
  21.                 }  
  22.             }  
  23.         };  
  24.     // 第三步,调用异步方法  
  25.     txbTip.Text = "正在请求,请等候……";  
  26.     MyClient.getCountryCityByIpAsync(txtIP.Text);  
  27. }  


 

好了,完成,记住WEB服务一般是异步调用,所以要在回调事件处理中取得调用结果。

运行一下,看看结果吧。

 

OK,就到这里吧。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值