Web Browser Task in Windows Phone 7 Via WCF Service


This articles shows implementation of one of the good concepts widely used on Windows Phone 7. This concept provides access to internet resources and browsing the way you want to.

Question Arises: What is a Web Browser Task?

This provides access to the internet resources in the phone whereby allowing to route to a specific requested URL. So, let's get it started now.

The Complete Code of IService1.cs looks like this:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text; 

namespace Web_Browser_Tasks_WCF
{
   
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.

    [ServiceContract]
    public interface IService1
    {
        [OperationContract]
        string URI(string a); 
    }
}

The Complete Code of Service1.svc.cs looks like this:   

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text; 

namespace Web_Browser_Tasks_WCF
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together.
    public class Service1 : IService1
    {
         public string URI(string a)
        {
            return "" + a;
        }
    }
}
    

The Complete Code of Web.Config looks like this:

<?xml version="1.0"?>
<
configuration> 
    <system.web>
        <compilation debug="true" targetFramework="4.0" />
    </system.web>
    <system.serviceModel>
        <behaviors>
            <serviceBehaviors>
                <behavior>
                    <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before
deployment -->
                    <serviceMetadata httpGetEnabled="true"/>

                    <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->

                    <serviceDebug includeExceptionDetailInFaults="false"/>
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
    </system.serviceModel>
    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>
    </system.webServer> 
</configuration>

The Complete Code of MainPage.xaml looks like this:

<phone:PhoneApplicationPage
    x:Class="Web_Browser_Task.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 is the root grid where all page content is placed-->

    <Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions> 

        <!--TitlePanel contains the name of the application and page title-->
        <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
            <TextBlock x:Name="ApplicationTitle" Text="Vijay's WebBrowserTask via WCF" Style="{StaticResource PhoneTextNormalStyle}"/>
            <TextBlock x:Name="PageTitle" Text="Windows 7 Phone" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
        </StackPanel> 

        <!--ContentPanel - place additional content here-->

        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <TextBox Height="72" HorizontalAlignment="Left" Margin="58,97,0,0" Name="textBox1"  VerticalAlignment="Top" Width="340" />
            <TextBlock Height="30" HorizontalAlignment="Left" Margin="112,47,0,0" Name="textBlock1" Text="Please Enter Web Address" VerticalAlignment="Top" Width="239" />
            <Button Content="Button" Height="72" HorizontalAlignment="Left" Margin="154,175,0,0" Name="button1" VerticalAlignment="Top" Width="160" Click="button1_Click" />
            <TextBlock Height="30" HorizontalAlignment="Left" Margin="27,286,0,0" Name="textBlock2" FontFamily="Verdana" FontSize="22" Foreground="Red" VerticalAlignment="Top" Width="406" />
        </Grid>
    </Grid> 

    <!--Sample code showing usage of ApplicationBar-->
    <!--<phone:PhoneApplicationPage.ApplicationBar>
        <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">
            <shell:ApplicationBarIconButton IconUri="/Images/appbar_button1.png" Text="Button 1"/>
            <shell:ApplicationBarIconButton IconUri="/Images/appbar_button2.png" Text="Button 2"/>
            <shell:ApplicationBar.MenuItems>
                <shell:ApplicationBarMenuItem Text="MenuItem 1"/>
                <shell:ApplicationBarMenuItem Text="MenuItem 2"/>
            </shell:ApplicationBar.MenuItems>
        </shell:ApplicationBar>
    </phone:PhoneApplicationPage.ApplicationBar>-->
</phone:PhoneApplicationPage>

The Complete Code of MainPage.xaml.cs looks like this:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using Web_Browser_Task.ServiceReference1;
using Microsoft.Phone.Tasks; 

namespace Web_Browser_Task
{
    public partial class MainPage : PhoneApplicationPage
    {
        // Constructor
        public MainPage()
        {
            InitializeComponent();
        } 

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            if (textBox1.Text == "")
            {
                textBlock2.Text = "Nothing Entered";
            }
            else
            {
                Service1Client objClient = new Service1Client();
                objClient.URICompleted += new EventHandler<URICompletedEventArgs>(URICall);
                objClient.URIAsync(textBox1.Text);
            }
        }
        void URICall(object sender, URICompletedEventArgs e)
        {
            WebBrowserTask objBrowserTask = new WebBrowserTask();
            objBrowserTask.Uri = new Uri(e.Result, UriKind.RelativeOrAbsolute);
            objBrowserTask.Show();
        }
    }
}

The Output of the Application looks like this. 

WebAddress0.png

I hope this article is useful for you. I look forward for your comments and feedback.