Windows Phone開發(47):輕鬆調用Web Service

來源:互聯網
上載者:User

眾所周知(除了沒用過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吧。

<phone:PhoneApplicationPage     x:Class="MyApp.MainPage"    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"    mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"    FontFamily="{StaticResource PhoneFontFamilyNormal}"    FontSize="{StaticResource PhoneFontSizeNormal}"    Foreground="{StaticResource PhoneForegroundBrush}"    SupportedOrientations="Portrait" Orientation="Portrait"    shell:SystemTray.IsVisible="True">    <!--LayoutRoot 是包含所有頁面內容的根網格-->    <Grid x:Name="LayoutRoot" Background="Transparent">        <Grid.RowDefinitions>            <RowDefinition Height="Auto"/>            <RowDefinition Height="*"/>        </Grid.RowDefinitions>        <!--TitlePanel 包含應用程式的名稱和網頁標題-->        <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">            <TextBlock x:Name="ApplicationTitle" Text="我的應用程式" Style="{StaticResource PhoneTextNormalStyle}"/>            <TextBlock x:Name="PageTitle" Text="頁面名稱" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>        </StackPanel>        <!--ContentPanel - 在此處放置其他內容-->        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">            <Grid.RowDefinitions>                <RowDefinition Height="auto"/>                <RowDefinition Height="*"/>            </Grid.RowDefinitions>            <Grid Grid.Row="0">                <Grid.ColumnDefinitions>                    <ColumnDefinition Width="auto"/>                    <ColumnDefinition Width="*"/>                    <ColumnDefinition Width="auto"/>                </Grid.ColumnDefinitions>                <TextBlock Grid.Column="0" VerticalAlignment="Center" Text="IP地址:"/>                <TextBox Name="txtIP" Grid.Column="1"/>                <Button Grid.Column="2" Click="onQuery">                    <Button.Content>                        <Path Data="M0,10 L20,10 M5,0 L20,10 M5,20 L20,10"                              VerticalAlignment="Stretch"                              HorizontalAlignment="Stretch"                              Stroke="White" StrokeThickness="3"/>                    </Button.Content>                </Button>            </Grid>            <StackPanel Grid.Row="1">                <TextBlock Name="txbTip"/>                <TextBlock Name="txbResult" Margin="2,12,2,0" FontSize="32"/>            </StackPanel>        </Grid>    </Grid> </phone:PhoneApplicationPage>

3、開啟“方案總管”,右擊“引用”節點,從彈出的菜單中選擇“加入服務參考”。

4、在彈出的對話方塊中,“地址”處輸入上文中提到的Web服務的地址,並點擊“前往”按鈕,待發現WEB服務完成後,在“命名空間”處輸入一個有效命名空間名字,隨你喜歡。最後別忘了單擊“確定”。

 

5、切換到後台代碼,完成查詢按鈕的單擊事件處理。

        private void onQuery(object sender, RoutedEventArgs e)        {            // 第一步,執行個體化用戶端代理類            IPQueryWebService.IpAddressSearchWebServiceSoapClient MyClient = new IPQueryWebService.IpAddressSearchWebServiceSoapClient();            // 第二步,綁定回調事件            MyClient.getCountryCityByIpCompleted += (s, arg) =>                {                    // 取得結果                    txbTip.Text = "請求完成。";                    if (arg.Error != null)                    {                        txtIP.Text = string.Format("錯誤:{0}", arg.Error.Message);                        return;                    }                    string[] res = arg.Result;                    if (res != null)                    {                        if (res.Length > 1)                        {                            txbResult.Text = string.Format("查詢結果:{0}", res[1]);                        }                    }                };            // 第三步,調用非同步方法呼叫            txbTip.Text = "正在請求,請等候……";            MyClient.getCountryCityByIpAsync(txtIP.Text);        }

 

好了,完成,記住WEB服務一般是非同步呼叫,所以要在回調事件處理中取得調用結果。

運行一下,看看結果吧。

 

OK,就到這裡吧。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.