Reminder in Windows Phone 7 Via WCF Service

Introduction

Today, in this article let's learn another new concept related to Windows Phone 7, whereby communicating with WCF Service to perform some operation.

Question: What is Reminder?

In simple terms "It provides customized way to notify the user with some information. Besides that, it provides an URI where the user can be launched to specific page when clicked".

Let's get this started off now!!!

Step 1: 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 Reminder_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]
        DateTime setReminder(DateTime a);
    }
}


Step 2: 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 Reminder_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 DateTime setReminder(DateTime a)
        {
            return a;
        }
    }
}


Step 3: 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>


Step 4: The complete code of MainPage.xaml looks like this:
 
<phone:PhoneApplicationPage 
    x:Class="Reminder_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"
xmlns:toolkit
="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit">

    <!--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 Reminder Application" FontFamily="Verdana" FontSize="22" 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" FontFamily="Verdana" FontSize="22" HorizontalAlignment="Left" Margin="6,115,0,0" Name="textBlock1" Text="Please Set Reminder Time: " VerticalAlignment="Top" Width="308" />
            <toolkit:TimePicker HorizontalAlignment="Left" Margin="309,92,0,0" Name="timePicker1" VerticalAlignment="Top" Width="147" />
            <toolkit:ToggleSwitch Header="Reminder" FontFamily="Verdana" FontSize="35" Checked="toggleSwitch1_Checked" Unchecked="toggleSwitch1_Unchecked" Height="115" HorizontalAlignment="Left" Margin="117,198,0,0" Name="toggleSwitch1" VerticalAlignment="Top" Width="279" />
        </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>


Step 5: 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 Reminder_Application.ServiceReference1;
using Microsoft.Phone.Scheduler;

namespace Reminder_Application
{
    public partial class MainPage : PhoneApplicationPage
    {
        // Constructor
        public MainPage()
        {
            InitializeComponent();
        }
 
        static void reminder_Call(object sender, setReminderCompletedEventArgs e)
        {
            Reminder obj_Reminder = new Reminder("Reminder1");
            obj_Reminder.Content = "Hello, It's Time for Meeting";
            obj_Reminder.BeginTime = e.Result;
            obj_Reminder.ExpirationTime = DateTime.Now.AddMinutes(15);
            ScheduledActionService.Add(obj_Reminder);

        }

        private void toggleSwitch1_Checked(object sender, RoutedEventArgs e)
        {
            toggleSwitch1.Content = "On";
            toggleSwitch1.SwitchForeground = new SolidColorBrush(Colors.Green);
            Service1Client obj_Client = new Service1Client();
            obj_Client.setReminderCompleted += new EventHandler<setReminderCompletedEventArgs>(reminder_Call);
            obj_Client.setReminderAsync(Convert.ToDateTime(timePicker1.Value));

        }

        private void toggleSwitch1_Unchecked(object sender, RoutedEventArgs e)
        {
            toggleSwitch1.Content = "Off";
            toggleSwitch1.Background = new SolidColorBrush(Colors.Red);
            ScheduledActionService.Remove("Reminder1");

        }

    }
}

Step 6: The output of the application looks like this:

Reminder1.png

Reminder1.png

Reminder1.1.png

Step 7: The output of the Reminder Notifying Application looks like this:

  Reminder2.png

I hope this article is useful for you.


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