Saving Contacts in Windows Phone 7 via WCF Service


Today, in this article let's get ready to work out with one concept windows phone. The saving contacts concept is very useful in real time and it's mostly used application by many users. I hope we all have some better idea on how to save contacts on our mobiles. So this article provides a real time example of how to approach if you going to say to code an application as this.

So, let's get it started off.

I think we all are good to go and implement this wonderful concept.

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 Save_Contact_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 FirstName(string a);

        [OperationContract]
        string LastName(string a);

        [OperationContract]
        string JobTitle(string a);

        [OperationContract]
        string WebSite(string a);

        [OperationContract]
        string Company(string a);

        [OperationContract]
        string PhoneNumber(string a);

        [OperationContract]
        string PersonalMail(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 Save_Contact_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 FirstName(string a)
        {
            return "" + a;
        }

        public string LastName(string a)
        {
            return "" + a;
        }

        public string JobTitle(string a)
        {
            return "" + a;
        }

        public string WebSite(string a)
        {
            return "" + a;
        }

        public string Company(string a)
        {
            return "" + a;
        }

        public string PhoneNumber(string a)
        {
            return "" + a;
        }

        public string PersonalMail(string a)
        {
            return "" + a;
        }
    }
}

The Complete Code of WebConfig 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="Save_Contact_Task_Application.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" Loaded="PhoneApplicationPage_Loaded">

    <!--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 Save Contact Application" 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">
            <TextBlock Height="30" HorizontalAlignment="Left" Margin="86,21,0,0" Name="textBlock1" Text="First Name" FontFamily="Verdana" FontSize="22" VerticalAlignment="Top" />
            <TextBox Height="72" HorizontalAlignment="Left" Margin="214,0,0,0" Name="textBox1"  VerticalAlignment="Top" Width="221" />
            <TextBlock Height="30" HorizontalAlignment="Left" Margin="92,85,0,0" Name="textBlock2" Text="Last name" FontFamily="Verdana" FontSize="22" VerticalAlignment="Top" />
            <TextBox Height="72" HorizontalAlignment="Left" Margin="214,61,0,0" Name="textBox2"  VerticalAlignment="Top" Width="221" />
            <TextBlock Height="30" HorizontalAlignment="Left" Margin="114,148,0,0" Name="textBlock3" Text="Job Title" FontFamily="Verdana" FontSize="22" VerticalAlignment="Top" />
            <TextBox Height="72" HorizontalAlignment="Left" Margin="214,125,0,0" Name="textBox3"  VerticalAlignment="Top" Width="221" />
            <TextBlock Height="30" HorizontalAlignment="Left" Margin="115,212,0,0" Name="textBlock4" Text="WebSite" FontFamily="Verdana" FontSize="22" VerticalAlignment="Top" />
            <TextBox Height="72" HorizontalAlignment="Left" Margin="214,188,0,0" Name="textBox4"  VerticalAlignment="Top" Width="221" />
            <TextBox Height="72" HorizontalAlignment="Left" Margin="214,250,0,0" Name="textBox5"  VerticalAlignment="Top" Width="221" />
            <TextBlock Height="30" HorizontalAlignment="Left" Margin="103,272,0,0" Name="textBlock5" Text="Company" FontFamily="Verdana" FontSize="22" VerticalAlignment="Top" />
            <TextBox Height="72" HorizontalAlignment="Left" Margin="214,313,0,0" Name="textBox6"  VerticalAlignment="Top" Width="221" />
            <TextBlock Height="30" HorizontalAlignment="Left" Margin="37,334,0,0" Name="textBlock6" Text="Phone Number" FontFamily="Verdana" FontSize="22" VerticalAlignment="Top" Width="170" />
            <TextBlock Height="30" HorizontalAlignment="Left" Margin="44,399,0,0" Name="textBlock7" Text="Personal Email" FontFamily="Verdana" FontSize="22" VerticalAlignment="Top" />
            <TextBox Height="72" HorizontalAlignment="Left" Margin="214,379,0,0" Name="textBox7"  VerticalAlignment="Top" Width="221" />
            <TextBlock Height="30" Foreground="Red" HorizontalAlignment="Left" Margin="109,559,0,0" Name="textBlock8" FontFamily="Verdana" FontSize="22" VerticalAlignment="Top" Width="310" />
            <Button Content="Save Contact" FontFamily="Verdana" FontSize="22" Height="73" HorizontalAlignment="Left" Margin="214,468,0,0" Name="button1" VerticalAlignment="Top" Width="221" Click="button1_Click" />
        </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 Microsoft.Phone.Tasks;
using Save_Contact_Task_Application.ServiceReference1;
namespace Save_Contact_Task_Application
{
    public partial class MainPage : PhoneApplicationPage
    {
        // Constructor
        public MainPage()
        {
            InitializeComponent();

        }

        SaveContactTask objSave = new SaveContactTask();
        Service1Client objClient = new Service1Client();
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            if (textBox1.Text == "" || textBox2.Text == "" || textBox3.Text == "" || textBox4.Text == "" || textBox5.Text == "" || textBox6.Text == "" || textBox7.Text == "")
            {
                textBlock8.Text = "Save Contact Unsuccessful";
            }
            else
            {
                objSave.Completed += new EventHandler<SaveContactResult>(SaveCall);
                objClient.FirstNameCompleted += new EventHandler<FirstNameCompletedEventArgs>(FirstCall);
                objClient.LastNameCompleted += new EventHandler<LastNameCompletedEventArgs>(LastCall);
                objClient.JobTitleCompleted += new EventHandler<JobTitleCompletedEventArgs>(JobCall);
                objClient.WebSiteCompleted += new EventHandler<WebSiteCompletedEventArgs>(WebCall);
                objClient.CompanyCompleted += new EventHandler<CompanyCompletedEventArgs>(CompanyCall);
                objClient.PhoneNumberCompleted += new EventHandler<PhoneNumberCompletedEventArgs>(PhoneCall);
                objClient.PersonalMailCompleted += new EventHandler<PersonalMailCompletedEventArgs>(EmailCall);

                objClient.FirstNameAsync(textBox1.Text);
                objClient.LastNameAsync(textBox2.Text);

                objClient.JobTitleAsync(textBox3.Text);

                objClient.WebSiteAsync(textBox4.Text);

                objClient.CompanyAsync(textBox5.Text);

                objClient.PhoneNumberAsync(textBox6.Text);

                objClient.PersonalMailAsync(textBox7.Text);
            }

            textBox1.Text = "";
            textBox2.Text = "";
            textBox3.Text = "";
            textBox4.Text = "";
            textBox5.Text = "";
            textBox6.Text = "";
            textBox7.Text = "";

        }
        void SaveCall(object sender, SaveContactResult e)
        {
            switch (e.TaskResult)
            {
                case TaskResult.OK:
                    MessageBox.Show("Contact Saved");
                    break;

                case TaskResult.Cancel:
                    MessageBox.Show("Contact Cancelled");
                    break;

                case TaskResult.None:
                    MessageBox.Show("Contact Cannot Be Saved");
                    break;
            }
        }
        static void FirstCall(object sender, FirstNameCompletedEventArgs e)
        {

            SaveContactTask objSave = new SaveContactTask();

            objSave.FirstName = e.Result;
            objSave.Show();
        }

        static void LastCall(object sender, LastNameCompletedEventArgs e)
        {
            SaveContactTask objSave = new SaveContactTask();

            objSave.LastName = e.Result;

            //  objSave.Show();

        }
        static void JobCall(object sender, JobTitleCompletedEventArgs e)
        {
            SaveContactTask objSave = new SaveContactTask();
            objSave.JobTitle = e.Result;

            //objSave.Show();
        }
        static void WebCall(object sender, WebSiteCompletedEventArgs e)
        {
            SaveContactTask objSave = new SaveContactTask();

            objSave.Website = e.Result;

            //objSave.Show();
        }
        static void CompanyCall(object sender, CompanyCompletedEventArgs e)
        {
            SaveContactTask objSave = new SaveContactTask();

            objSave.Company = e.Result;
            //    objSave.Show();
        }
        static void PhoneCall(object sender, PhoneNumberCompletedEventArgs e)
        {
            SaveContactTask objSave = new SaveContactTask();
            objSave.MobilePhone = e.Result;
            //      objSave.Show();
        }
        static void EmailCall(object sender, PersonalMailCompletedEventArgs e)
        {

            SaveContactTask objSave = new SaveContactTask();
            objSave.PersonalEmail = e.Result;
 
            //    objSave.Show();
        }

        private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
        {

        }
    }
}

The Output of the Application looks like this:

SaveContact0.png

The Contact Saving Application looks like this:

SaveContact1.png

SaveContact1.1.png

The Nothing Entered Application looks like this:

SaveContact2.png

I hope this article is useful for you.


Similar Articles
MVC Corporation
MVC Corporation is consulting and IT services based company.