Showing posts with label examples. Show all posts
Showing posts with label examples. Show all posts

Friday, January 20, 2012

WCF-4 Client/Host quick start/tutorial

For those of you who already know WCF basics and need to start quickly here are guidelines to start a working client-server/service project:

My Quickest Start
  1. Designing Service Contracts
    1. Start simple, grow in time.
  2. Implement the contract
  3. Host the service - Console (starting simple).
    1. http://msdn.microsoft.com/en-us/library/ms731758.aspx
      1. New 'Console Application'
      2. See 'Example Host Code' below...
        1. Add Reference.... Select System.ServiceModel
        2. Reference 'ServiceModel'
        3. Start the service code
          1. Using
          2. Open
          3. Close
  4. Disable WcfSvcHost (if needed)
    1. "Right-click the WCF Service Project in Solution Explorer, choose Properties, and click WCF Options tab. The Start WCF Service Host when debugging another project in the same solution check box is enabled by default."
  5. CLIENT SIDE - Obtain the Service Contract, Bindings, and Addresses
    1. Enable the service
      1. Set the Host as the default startup program and run in without debugger (usually <CTRL>+F5).
    2. 'Add Service Reference...' 
      1. Past the service address in the 'Address' field and 'Go'.
      2. Point the service and 'OK' =results=> a new client proxy code will be generated in your client.
    3. SET YOUR CLIENT APPLICATION AS THE STARTUP PROGRAM :)
    4. Add service usage code to your client (see 'Example Client Code' below...).
  6. Run and relax :-).

    Example Host Code
    Code Snippet
    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5.  
    6. using System.ServiceModel;
    7. using System.ServiceModel.Description;
    8. using MyWcfLib;
    9.  
    10.  
    11. namespace MyServer
    12. {
    13.     class Program
    14.     {
    15.         static void Main(string[] args)
    16.         {
    17.             Uri baseAddress = new Uri("http://localhost:9090/hello");
    18.  
    19.             using (ServiceHost host = new ServiceHost(typeof(MyService), baseAddress))
    20.             {
    21.                 // Enable metadata publishing.
    22.                 ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
    23.                 smb.HttpGetEnabled = true;
    24.                 smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
    25.                 host.Description.Behaviors.Add(smb);
    26.  
    27.                 // Open the ServiceHost to start listening for messages. Since
    28.                 // no endpoints are explicitly configured, the runtime will create
    29.                 // one endpoint per base address for each service contract implemented
    30.                 // by the service.
    31.                 host.Open();
    32.  
    33.                 Console.WriteLine("The service is ready at {0}", baseAddress);
    34.                 Console.WriteLine("Press <Enter> to stop the service.");
    35.                 Console.ReadLine();
    36.  
    37.                 // Close the ServiceHost.
    38.                 host.Close();
    39.             }
    40.  
    41.         }
    42.     }
    43. }

    Example Client Code
    Code Snippet
    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5.  
    6. namespace ConsoleApplication1
    7. {
    8.     class Program
    9.     {
    10.         static void Main(string[] args)
    11.         {
    12.             var client = new ServiceReference1.MyServiceClient();
    13.  
    14.             Console.WriteLine(client.GenerateGuid().ToString());
    15.             client.Close();
    16.  
    17.             Console.ReadLine();
    18.         }
    19.     }
    20. }


    MSDN's 'Basic Programming Lifecycle'


    Please, post comments if you find errors.
    I'll fix them ASAP and others can enjoy a cleaner clode.

    Hope it helps...

    Saturday, January 7, 2012

    WPF, XAML: TreeView HierarchicalDataTemplate databinding to unknown XML/DataSource

    Problem description
    • I wish to bind my TreeView to a datasource.
    • The TreeView should build its child nodes dynamically (unknows childs in datasource).
    • Each node should display its data or (if no data) its element name.

    Solution
    You need to use and understand these parts:
    1. HierarchicalDataTemplate
      1. HierarchicalDataTemplate.Triggers
    2. Binding XPath

    Usage Example
    Just copy paste and start playing / reading each part's help.

    XAML
    Code Snippet
    1. <Window x:Class="TreeViewDataBinding.Window1"
    2.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4.     Title="Window1" Height="300" Width="300">
    5.     <Window.Resources>
    6.         <HierarchicalDataTemplate x:Key="NodeTemplate" >
    7.  
    8.             <TextBlock x:Name="tbName" Text="?" />
    9.  
    10.             <HierarchicalDataTemplate.ItemsSource>
    11.                 <Binding XPath="child::node()" />
    12.             </HierarchicalDataTemplate.ItemsSource>
    13.  
    14.             <HierarchicalDataTemplate.Triggers>
    15.                 <DataTrigger Binding="{Binding Path=NodeType}" Value="Text">
    16.                     <Setter TargetName="tbName" Property="Text" Value="{Binding Path=Value}"/>
    17.                 </DataTrigger>
    18.                 <DataTrigger Binding="{Binding Path=NodeType}" Value="Element">
    19.                     <Setter TargetName="tbName" Property="Text" Value="{Binding Path=Name}"/>
    20.                 </DataTrigger>
    21.             </HierarchicalDataTemplate.Triggers>
    22.         </HierarchicalDataTemplate>
    23.  
    24.         <XmlDataProvider x:Key="xmlDataProvider"/>
    25.     </Window.Resources>
    26.     
    27.     <StackPanel>
    28.         <Button Click="Button_Click">Reload</Button>
    29.         
    30.         <TreeView
    31.             ItemsSource="{Binding Source={StaticResource xmlDataProvider}, XPath=*}"
    32.             ItemTemplate="{StaticResource NodeTemplate}" />
    33.     </StackPanel>
    34. </Window>

    Code behind
    Code Snippet
    1. using System.Windows;
    2. using System.Windows.Data;
    3. using System;
    4.  
    5. namespace TreeViewDataBinding
    6. {
    7.     public partial class Window1 : Window
    8.     {
    9.         public Window1()
    10.         {
    11.             InitializeComponent();
    12.         }
    13.  
    14.         private void Button_Click(object sender, RoutedEventArgs e)
    15.         {
    16.             var provider = (XmlDataProvider)this.Resources["xmlDataProvider"];
    17.             provider.Source = new Uri(@"Data\standard.xml", UriKind.Relative);
    18.         }
    19.     }
    20. }

    Additional files



    Performance
    I was able to load 100MB of xml data in around ~6 seconds first time, ~4 seconds from the second time.

    Testbench station
    • i7 (8 cores) @ 2.80GHz
    • 4.00GB RAM
    • 64-Bit OS, Win7 Pro.
    CPU & memory usage
    The CPU was at idle when i started, the RAM was at the base line.

    Results

    Resources

    Hope it helps.

    Saturday, December 24, 2011

    Friday, December 9, 2011

    WPF XAML example: Binding FontSize to a Slider

    Code snippet

    Code Snippet
    1. <TextBlock Text="Hi there." FontSize="{Binding ElementName=mySlider, Path=Value}" />
    2. <Slider Minimum="8" Maximum="32" x:Name="mySlider" Value="12" />


    Result

    WPF XAML example: Rich texted ToolTip with italic, color and more...

    Example
    In this example I'll demonstrate how to add a ToolTip to a TextBox.
    The ToolTip should be colored and italic.

    Code snippet

    Code Snippet
    1. <TextBox x:Name="SampleText"
    2.     TextWrapping="Wrap">
    3.     
    4.     <TextBox.ToolTip>
    5.         <TextBlock>
    6.             <Italic Foreground="Red">Instructions: </Italic> Type here to change the preview text.
    7.         </TextBlock>
    8.     </TextBox.ToolTip>
    9.     
    10.     The quick brown fox jumps over the lazy dog.
    11. </TextBox>


    Result


    Sources

    WPF XAML TIP: Label with Target + Control composition == Hotkey control

    Code snippet

    Code Snippet
    1. <Border DockPanel.Dock="Top">
    2.     <StackPanel>
    3.         <Label
    4.             Content="_Last Name:"
    5.             Target="{Binding ElementName=lastName}" />
    6.         <TextBox x:Name="lastName" Width="100" HorizontalAlignment="Left"/>
    7.     </StackPanel>
    8. </Border>


    Usage 
    Press ALT+L to focus the TextBox control 'lastName'.

    Result

    WPF: TextBox with SpellCheck and ToolTip XAML example

    Code snippet

    Code Snippet
    1. <TextBox
    2.     Width="200"
    3.     SpellCheck.IsEnabled="True"
    4.     ToolTip="Tips for this input-box here..." />


    Results

    WPF: Rich TextBlock XAML example

    "The TextBlock was designed specifically for the purpose of showing small amounts of flowing rich text to the user.
    It is the perfect element for displaying instructions or summary information."


    Usage example
    I have a program that users can communicate with each other. I wish to add the feature of bold, colored, line-breaking and icons to that chat.

    Here is an example I've found to illustrate it:













    Example
    Code Snippet
    1. <TextBlock FontSize="10" TextWrapping="Wrap" >
    2.     <Image Stretch="UniformToFill" Width="32" Height="32" Source="http://upload.wikimedia.org/wikipedia/en/b/b0/Avatar-Teaser-Poster.jpg" Margin="2 2 2 2" />
    3.                     <Bold><Italic FontSize="12" Foreground="DarkGreen">ShloEmi:</Italic></Bold><LineBreak />
    4.     <Bold><Italic FontSize="14" Foreground="BlueViolet">H</Italic></Bold>ave  fun with <Bold>TextBlock's</Bold>.<LineBreak />
    5.     <AccessText Foreground="Blue">It's easy when you have an example </AccessText> <Image Source="http://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Smiley.svg/50px-Smiley.svg.png" Width="16" Height="16"></Image>
    6. </TextBlock>

    Result








    Have fun...

    Thursday, December 8, 2011

    WPF: Bulletdecorator XAML example

    BulletDecorator is basically like any editor bullet (like MS word's bullet). You can specify how to draw the bullet itself and decorate what ever you need.

    Suppose we want to do the following effect in WPF:

    • This is a bullet
    Here is the source for it:
    Code Snippet
    1. <BulletDecorator>
    2.     <BulletDecorator.Bullet>
    3.         <Polygon Margin=" 2, 0, 0, 0" Points="0, 5 5, 0 10, 5 5, 10" Fill=" Blue" />
    4.     </BulletDecorator.Bullet>
    5.     <TextBlock Margin="10, 0, 0, 0" Text="This is a bullet" />
    6. </BulletDecorator>


    And here is the results:



    Source - Bulletdecorator in WPF | Controls | w3mentor

    Wednesday, December 7, 2011

    TUTORIAL: VS - Creating Code Snippets - CodeProject

    I was in the middle of creating my experiance/article about the snippets subject when I got an email from http://www.codeproject.com/ with this wonderful article.

    Extending Visual Studio Part 1 - Creating Code Snippets - CodeProject

    I've already created some snippets, feel free to use them:

    'Decorator-Pattern' snippet (activation: dp_decorator + TAB):
    Code Snippet
    1. xml version="1.0" encoding="utf-8" ?>
    2. <CodeSnippetsxmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    3. <CodeSnippet Format="1.0.0">
    4. <Header>
    5. <Title>Decorator DPTitle>
    6. <Shortcut>dp_decoratorShortcut>
    7. <Description>Code snippet for decorator design patternDescription>
    8. <Author>S.OAuthor>
    9. <SnippetTypes>
    10. <SnippetType>ExpansionSnippetType>
    11. SnippetTypes>
    12. Header>
    13. <Snippet>
    14. <Declarations>
    15. <Literal>
    16. <ID>ComponentID>
    17. <ToolTip>Component nameToolTip>
    18. <Default>ComponentDefault>
    19. Literal>
    20. <Literal>
    21. <ID>DecoratorID>
    22. <ToolTip>Decorator nameToolTip>
    23. <Default>DecoratorDefault>
    24. Literal>
    25. Declarations>
    26. <Code Language="csharp">
    27. // Decorator patern:
    28. // http://en.wikipedia.org/wiki/Decorator_pattern#Structure
    29. // http://www.dofactory.com/Patterns/PatternDecorator.aspx
    30. abstract class $Component$
    31. {
    32. public abstract void Operation();
    33. }
    34. abstract class $Decorator$ : $Component$
    35. {
    36. protected $Component$ _$Component$;
    37. public void SetComponent($Component$ component)
    38. {
    39. this._$Component$ = component;
    40. }
    41. public override void Operation()
    42. {
    43. if (_$Component$ != null)
    44. {
    45. _$Component$.Operation();
    46. // + [your operation here]
    47. }
    48. }
    49. }
    50. $end$
    51. ]]>
    52. Code>
    53. Snippet>
    54. CodeSnippet>
    55. CodeSnippets>

    The 'Event changed property' snippet (eprop + TAB):
    Code Snippet
    1. xml version="1.0" encoding="utf-8" ?>
    2. <CodeSnippetsxmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    3. <CodeSnippet Format="1.0.0">
    4. <Header>
    5. <Title>event changed propertyTitle>
    6. <Shortcut>epropShortcut>
    7. <Description>Code snippet for eprop...Description>
    8. <Author>SOAuthor>
    9. <SnippetTypes>
    10. <SnippetType>ExpansionSnippetType>
    11. SnippetTypes>
    12. Header>
    13. <Snippet>
    14. <Declarations>
    15. <Literal Editable="true">
    16. <ID>prop_nameID>
    17. <ToolTip>property nameToolTip>
    18. <Function>PropName()Function>
    19. <Default>PropNameDefault>
    20. Literal>
    21. <Literal Editable="true">
    22. <ID>prop_typeID>
    23. <ToolTip>property typeToolTip>
    24. <Function>PropType()Function>
    25. <Default>ObjectDefault>
    26. Literal>
    27. Declarations>
    28. <Code Language="csharp">
    29. #region $prop_name$
    30. ///
    31. /// Occurs when $prop_name$ changes.
    32. ///
    33. public event EventHandler $prop_name$Changed;
    34. ///
    35. /// Raises the event.
    36. ///
    37. /// The instance containing the event data.
    38. protected virtual void On$prop_name$Changed(EventArgs e)
    39. {
    40. if ($prop_name$Changed != null)
    41. $prop_name$Changed(this, e);
    42. }
    43. private $prop_type$ _$prop_name$ = null;$end$
    44. ///
    45. /// Gets or sets the type of the region.
    46. ///
    47. ///
    48. /// The type of the region.
    49. ///
    50. public $prop_type$ $prop_name$
    51. {
    52. get { return _$prop_name$; }
    53. set
    54. {
    55. if (_$prop_name$ != value)
    56. {
    57. _$prop_name$ = value;
    58. On$prop_name$Changed(new EventArgs());
    59. }
    60. }
    61. }
    62. #endregion
    63. ]]>
    64. Code>
    65. Snippet>
    66. CodeSnippet>
    67. CodeSnippets>

    And the 'TODO' snippet (TD + TAB), need some polish like auto date/time stamp, priority...:
    Code Snippet
    1. xml version="1.0" encoding="utf-8" ?>
    2. <CodeSnippetsxmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    3. <CodeSnippet Format="1.0.0">
    4. <Header>
    5. <Title>TODOTitle>
    6. <Shortcut>TDShortcut>
    7. <Description>Code snippet for TODO...Description>
    8. <Author>SOAuthor>
    9. <SnippetTypes>
    10. <SnippetType>ExpansionSnippetType>
    11. SnippetTypes>
    12. Header>
    13. <Snippet>
    14. <Declarations>
    15. Declarations>
    16. <Code Language="csharp">// TODO:P, TimeStamp, S.O: $end$]]>
    17. Code>
    18. Snippet>
    19. CodeSnippet>
    20. CodeSnippets>

    My advice: if you already created a code pattern twice (meaning - you copied and pasted a code and renamed some variables and function/property names), add it to your snippets, you'll need it and it will save time.

    REMARK: Please follow the codeproject artical if you wish to install/use them...


    Tuesday, December 6, 2011

    TIP: Creating a file, fast, with incremental values (using FOR /L).

    I needed to create a file (called urls.txt) that contains lots of image urls, here is the solution:


    1. Create a batch file (I'll call it gget.bat).
    2. copy and paste the following to gget.bat file.

    REM ~~~~~ gget.bat file content ~~~~~~~~~~~~~~~

    @echo off
    for /L %%a in (0,1,1984) do (
    echo http://domain.com/images/%%a.jpg >>c:\urls.txt
    )

    ECHO DONE!
    pause
    REM ~~~~~ gget.bat file content ~~~~~~~~~~~~~~~


    1. change the numbers in "(0,1,1984)" to the desired ones (please read more about 'FOR /L' here.).
    the result is a file 'c:\urls.txt' that contains this:

    http://domain.com/images//0.jpg 
    http://domain.com/images//1.jpg 
    http://domain.com/images//2.jpg 
    http://domain.com/images//3.jpg 
    ...
    http://domain.com/images//1983.jpg 
    http://domain.com/images//1984.jpg 

    Hope it helps...

    Monday, December 5, 2011

    TIP - How to check an errorlevel of a program...

    First understand a little about error levels... Batch files - Errorlevels:

    Next... Write this code the a batch file and run it (change the runme.exe to the program that you wish to check the error-level).
    #~~~~~~~~~~~~~~~~~~~~~~~~~
    runme.exe
    ECHO.%ERRORLEVEL%
    PAUSE
    #~~~~~~~~~~~~~~~~~~~~~~~~~

    Hope it helps...

    Tuesday, November 15, 2011

    Example: C# dynamic 'Enum' like solution.

    Example usage:


    Code Snippet
    1. using System;
    2. using System.Collections.Generic;
    3.  
    4. namespace GuiLib.TeraRegion
    5. {
    6.     public class TeraRegionModel
    7.     {
    8.  
    9.         /// <summary>
    10.         /// Dynamic enum of RegionTypes.
    11.         /// <remarks>* This is a [Flags] and normal mixed enum!
    12.         /// * 0 is reserved! it's not used!
    13.         /// * 1 is reserved! it's void.
    14.         /// Find it's max and assigne it's next value like this:
    15.         ///     var next_enum_val = RegionTypes.Values.Max<ulong>();
    16.         ///     RegionTypes.Add("new_item", next_enum_val*2);
    17.         /// </remarks>
    18.         /// </summary>
    19.         public static Dictionary<string, ulong> RegionTypes = new Dictionary<string, ulong>()
    20.         {
    21.             {"void", 1}
    22.         };
    23.  
    24.  
    25.         #region RegionType
    26.  
    27.         /// <summary>
    28.         /// Occurs when RegionType changes.
    29.         /// </summary>
    30.         public event EventHandler RegionTypeChanged;
    31.  
    32.         /// <summary>
    33.         /// Raises the <see cref="E:RegionTypeChanged"/> event.
    34.         /// </summary>
    35.         /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
    36.         protected virtual void OnRegionTypeChanged(EventArgs e)
    37.         {
    38.             if (RegionTypeChanged != null)
    39.                 RegionTypeChanged(this, e);
    40.         }
    41.  
    42.         private ulong _RegionType = 1;
    43.  
    44.  
    45.         /// <summary>
    46.         /// Gets or sets the type of the region.
    47.         /// </summary>
    48.         /// <value>
    49.         /// The type of the region.
    50.         /// </value>
    51.         public ulong RegionType
    52.         {
    53.             get
    54.             {
    55.                 return _RegionType;
    56.             }
    57.  
    58.             set
    59.             {
    60.                 if (_RegionType != value)
    61.                 {
    62.                     _RegionType = value;
    63.  
    64.                     OnRegionTypeChanged(new EventArgs());
    65.                 }
    66.             }
    67.         }
    68.         #endregion
    69.  
    70.     }
    71. }