Showing posts with label Silverlight. Show all posts
Showing posts with label Silverlight. Show all posts

Tuesday, January 31, 2012

How to add MIME types in Web.config on hosted Servers, Go Daddy, IIS 7 etc.

Ever wanted to add a custom mime type to your Web server?  I ran into this issue the other day when I tried to serve up .otf files related to fonts on my Web server and  I got this error: 404.3 error - mime type missing!

Thankfully, adding mime types is easier than ever thanks to the all-new distributed configuration option, which allows for IIS7 configuration to be stored in web.config files, along with asp.net configuration, to be deployed with your content. 

I'll show how easy it is to add mime types to your Web server.  This method will work on any IIS7 web server, and it will be ignored on all non-IIS7 web servers, so it should be safe to do no matter the type of application or content.  Since the <staticContent> section is delegated by default, the configuration snippets below should 'just work' on all IIS7 Web sites. 

  1. Open or edit the web.config in your site home directory.
  2. Add the following section in configuration section under web server.
<system.webServer>   
    <staticContent>
      <mimeMap fileExtension=".otf" mimeType="font/otf" />
    </staticContent>
</system.webServer>

This works even on Go Daddy hosted server also. You can add as many file times you want allow in this static content section.  For example these few MIME types you can add if you want on your Web server

<mimeMap fileExtension=".m4v" mimeType="video/m4v" />
<mimeMap fileExtension=".ogg" mimeType="audio/ogg" />
<mimeMap fileExtension=".oga" mimeType="audio/ogg" />
<mimeMap fileExtension=".ogv" mimeType="video/ogg" />
<mimeMap fileExtension=".webm" mimeType="video/webm"/>
<!-- For silverlight applicaitons -->
<mimeMap fileExtension=".xaml" mimeType="application/xaml+xml" />
<mimeMap fileExtension=".xap" mimeType="application/x-silverlight-app" />
<mimeMap fileExtension=".xbap" mimeType="application/x-ms-xbap" />

Hope this helps Thumbs up

Monday, October 24, 2011

Silverlight Integration Pack for Microsoft Enterprise Library 5.0

Silverlight Integration Pack for Enterprise Library is a collection of guidance and reusable application blocks designed to assist Silverlight application developers with common LOB development challenges. This release includes: Caching Application Block, Exception Handling Application Block, Logging Application Block, Policy Injection Application Block, Validation Application Block, and Unity Application Block. These blocks are designed to encapsulate recommended practices which facilitate consistency, ease of use, integration, and extensibility. The release also addresses the needs of those who would like to port their existing LOB applications, that already leverage Enterprise Library, to Silverlight

This release includes:

  • Caching Application Block with support for:
    • In-memory cache
    • Isolated storage cache
    • Expiration and scavenging policies
    • Notification of cache purging
  • Validation Application Block with support for:
    • Multi-level complex validation
    • Attribute-based specification of validation rules
    • Configuration-based specification of validation rules
    • Simple cross-field validation
    • Self-validation
    • Cross-tier validation (through WCF RIA Services integration)
    • Multiple rule-sets
    • Meta data type for updating entities with external classes in Silverlight
    • Rich set of built-in validators
  • Logging Application Block, including:
    • Notification trace listener
    • Isolated storage trace listener
    • Remote service trace listener with support of batch logging
    • Implementation of a WCF Remote logging service that integrates with the desktop version of the Logging Application Block
    • Logging filters
    • Tracing
    • Logging settings runtime change API
  • Exception Handling Application Block, including:
    • Simple configurable, policy-based mechanism for dealing with exceptions consistently
    • Wrap handler
    • Replace handler
    • Logging handler
  • Unity Application Block – a dependency injection container
  • Dependency injection container independence (Unity ships with the Enterprise Library, but can be replaced with a different container)
  • Unity Interception mechanism, with support for:
    • Virtual method interception
    • Interface interception
  • Policy Injection Application Block, including:
    • Validation handler
    • Exception Handling handler
    • Logging handler
  • Flexible configuration options, including:
    • XAML-based configuration support
    • Asynchronous configuration loading
    • Interactive configuration console supporting profiles (desktop vs. Silverlight)
    • Translation tool for XAML config (needed to convert conventional XML configuration files):
      • Standalone command-line tool
      • Config console wizard
      • MS Build task
    • Programmatic configuration support via a fluent interface
  • StockTrader V2 Reference Implementation
Download

Download the "Enterprise Library 5.0 Silverlight Integration Pack.msi" and install it. Alternatively, download specific application blocks from NuGet.
To get the optional configuration tool, install it separately from the Visual Studio gallery or download and install the Microsoft.Practices.EnterpriseLibrary.ConfigConsole.vsix package.

Thursday, August 25, 2011

How to Close the Browser Window from a Silverlight Application

All secured sites ask you to close your browser window after you sign out from a web application. This is a security measure which actually removes all session details from the browser cache.

If you are developing a secured site and want to close the browser window just after the user logs out from the application, this small tip will help you. If you want to develop the same behavior in your Silverlight application, this is how we can do the trick.

Use  the "System.Windows.Browser.HtmlPage.Window.Invoke()" method to call the Close() method of the browser window, as shown in the below code snippet:

private void OnWindowCloseClick(object sender, RoutedEventArgs e)
{
    System.Windows.Browser.HtmlPage.Window.Invoke("close");
}

The above code when called will close the browser window where your Silverlight application is hosted. If it is a tab, it will close the Window tab instead. If you are using it inside Internet Explorer, it will ask you whether you really want to close the browser. If you press "No", it will remain in that page, and clicking "Yes" will close the browser tab/window

Wednesday, May 18, 2011

How to add a ServiceThrottlingBehavior to a WCF Service?

When working with WCF especially when middle-tier client applications uses Windows Communication Foundation, you should always think about performance and take some major design decisions and tuning parameters.

By adding ServiceThrottlingbehavior in web.config we can achieve high performance using WCF. Below is the sample serivceThrottleconfiguration settings in web.config in .NET 4.0 Framework.

 <behaviors>
      <serviceBehaviors>
        <behavior name="CommonService">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
          <serviceThrottling maxConcurrentCalls="16" 
                             maxConcurrentInstances="116"   
                             maxConcurrentSessions="100"   />
        </behavior>
      </serviceBehaviors>
    </behaviors>

The main purpose for the throttling settings can be classified into the following two aspects:


  1. Controlled resource usage: With the throttling of concurrent execution, the usage of resources such as memory or threads can be limited to a reasonable level so that the system works well without hitting reliability issues.

  2. Balanced performance load: Systems always work in a balanced way when the load is controlled. If there are too much concurrent execution happening, a lot of contention and bookkeeping would happen and thus it would hurt the performance of the system.

In WCF 4, the default values of these settings are revised so that people don’t have to change the defaults in most cases. Here are the main changes:


  • MaxConcurrentSessions: default is 100 * ProcessorCount

  • MaxConcurrentCalls: default is 16 * ProcessorCount

  • MaxConcurrentInstances: default is the total of the above two, which follows the same pattern as before.

“ProcessorCount” is used as multiplier for the settings. So on a 4-proc server, you would get the default of MaxConcurrentCalls as 16 * 4 = 64. Thus the consideration is that, when you write a WCF service and you use the default settings, the service can be deployed to any system from low-end one-proc server to high-end such as 24-way server without having to change the settings. So CPU uses count as the multiplier.

Please note, these changes are for the default settings only. If you explicitly set these settings in either configuration or in code, the system would use the settings that you provided. No “ProcessCount” multiplier would be applied.

Friday, April 15, 2011

Silverlight 5 Beta Released & Microsoft Silverlight 5 Beta Tools for VS 2010 SP1

Microsoft has just released first beta of upcoming Silverlight 5.
Microsoft Silverlight 5 Beta Tools for Visual Studio 2010 Service Pack 1 is an Add-on and pre-requisite files for Visual Studio 2010 Service Pack 1 to develop Silverlight 5 Beta and Microsoft WCF RIA Services V1.0 SP2 Preview (April 2011) applications.
Download: Silverlight 5 Tools Beta
Microsoft® Silverlight™ 5 Software Development Kit Beta
Silverlight 5 Beta Documentation

Getting Started with Silverlight 5 Beta

Thursday, December 30, 2010

Silverlight Programming: RadComboBox Virtualization

Telerik RadControls' API gives you the ability to configure the RadComboBox to support virtualization, which reduces the memory footprint of the application and speeds up the loading time thus enhancing additionally the UI performance. Some times its required to load thousands of items in a RadComboBox. By default the control creates RadComboBoxItem containers for each data item, so it might take some time to open the drop-down. To resolve the problem you just have to change the RadComboBox's ItemsPanel with VirtualizingStackPanel:

Here is the snippet of code block

<telerik:RadComboBox HorizontalAlignment="Left" TextSearchMode="StartsWith"
IsFilteringEnabled="True" OpenDropDownOnFocus="True" Width="200" 
IsEditable="True" IsDropDownOpen="False" Name="AccountDropDownList" 
SelectedValuePath="customer_number" DisplayMemberPath="customer_name" >
  <telerik:RadComboBox.ItemsPanel>
       <ItemsPanelTemplate>
        <VirtualizingStackPanel />
      </ItemsPanelTemplate>
  </telerik:RadComboBox.ItemsPanel>
</telerik:RadComboBox>

Hope this is useful Nerd smile

Silverlight Programming : “Operation not supported on read-only collection”

Recently when I was trying to bind data to a Combo box conditionally I got this message saying "Operation not supported on read-only collection". Though I am clearing items in the collection and binding the ItemsSource I got this error. So I have set ItemSource to null before I clear the items. It worked well for me. Here is the sample snippet for doing this.

CarrierAccountDropDownList.ItemsSource = null;
CarrierAccountDropDownList.Items.Clear();
CarrierAccountDropDownList.ItemsSource = e.Result;
Happy Coding Coffee cup

Monday, December 20, 2010

WCF OperationContractAttribute with example

The OperationContractAttribute, also defined in the System.ServiceModel namespace, can be applied only to methods. It should declare to the method which belongs to a Service contract. Operation contract can be declared with below named parameters that provide control over the service description and message formats.

Name Specifies a different name for the operation instead of using the default, which is the method name.Action Controls the action header for messages to this operation.

ReplyAction Controls the action header for response messages from this operation.

IsOneWay Indicates whether the operation is one-way and has no reply. When operations are one-way, ReplyAction is not supported.

ProtectionLevel Enables the Service contract to specify constraints on how messages to
all operations in the contract are protected on the wire, that is, whether they are signed and encrypted.

IsInitiating Indicates whether invoking the operation initiates a new session between the caller and the service.

IsTerminating Indicates whether invoking the operation terminates an existing session between the caller and the service

Here is Sample WCF Class for reference.

// C#
[ServiceContract(Namespace = "")]
public class CrudContract
{
    [OperationContract(IsOneWay = true, Action = "urn:crud:insert")]
    void ProcessInsertMessage(Message message);
    [OperationContract(IsOneWay = true, Action = "urn:crud:update")]
    void ProcessUpdateMessage(Message message);
    [OperationContract(IsOneWay = true, Action = "urn:crud:delete")]
    void ProcessDeleteMessage(Message message);
    // The catch-all operation:
    [OperationContract(IsOneWay = true, Action = "*")]
    void ProcessUnrecognizedMessage(Message message);
}

Hope this is useful Party smile

Wednesday, December 15, 2010

“CleanRiaClientFilesTask" task failed unexpectedly

Recently few of our developers and me got this error while building my Silverlight application. I got this error while checking in the code and merge my code changes.

Error Details.

Error    38    The "CleanRiaClientFilesTask" task failed unexpectedly.
System.ArgumentException: Illegal characters in path.

To resolve this we need to do two simple steps.

Step 1: Go to this location in your system or your Framework install directory, for me its C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files. Clean all the temporary files under this location and leave the root folder empty.

Step 2: Go to your project location and Delete all the files in \obj folder. Basically all the files are stored in the \obj folder created by ria services.

Now clean the project and try building again. It worked for me. Hope this will help you. Good luck Hot smile

Thursday, December 09, 2010

Iterating through Generic List in C#

Recently I need to loop through a Generic list and bind the result to a Combobox. Here is how you can do this in C#

List<CCDSDateResult> list = new List<CCDSDateResult>();
for (int i = 0; i < e.Result.Count; i++)
{
    if (e.Result.ToList()[i].ccds_date.ToString().Length > 0)
    {
        // Write your logic..to add item in the list
        list.Add(new CCDSDateResult(DateTime.Parse(e.Result.ToList()[i].ccds_date.ToString())));
    }
}
// adding a empty record to the list
list.Insert(0, new CCDSDateResult());
this.OrderComboBox.ItemsSource = list.ToList();

Hope this is useful. Thumbs up

Exporting to Excel from Telerik Gridview in Silverlight

Here is the sample code for exporting Telerik Gridview in silverlight.

private void btnExportOrders_Click(object sender, RoutedEventArgs e)
{
   // Checking whether grid has rows
    if (OrderGrid.Items.Count > 0)
    {
          string extension = "xls";
          string selectedItem = "Excel";
          ExportFormat format = ExportFormat.ExcelML;
          SaveFileDialog dialog = new SaveFileDialog();
          dialog.DefaultExt = extension;
          dialog.Filter = String.Format("{1} files (*.{0})|*.{0}|All files (*.*)|*.*", extension, selectedItem);
          dialog.FilterIndex = 1;
          if (dialog.ShowDialog() == true)
          {
              using (Stream stream = dialog.OpenFile())
              {
                GridViewExportOptions options = new GridViewExportOptions();
                options.Format = format;
                options.ShowColumnHeaders = true;
                options.Encoding = Encoding.UTF8;
                options.ShowColumnHeaders = true;
               // name of the grid which you want export      
                OrderGrid.Export(stream, options);
               }
           }
     }
     else
      {
         // User friendly Message
          MessageBox.Show("There are no records to export.", "Export Warning!", MessageBoxButton.OK);
      }
 }

This export code will also support different formats like CSV,Text and HTML. All you need to change is the enum type for ExportFormat to above formats and the extension. Its easy and simple. Good luck Winking smile

Silverlight: MessageBox with Title, OK, and Cancel Buttons

A message box is a dialog box that is used to display an alert or a message. A message box can have a title and multiple options such as Yes/No or  OK/Cancel. A message box can also have some input control to take input from a user.

The MessageBox class in WPF represents a modal message box dialog, which is defined in the System.Windows namespace. The Show static method of the MessageBox is the only method that is used to display a message box. The Show method returns a MessageBoxResult enumeration that has values OK, Cancel, Yes, and No. We can use MessageBoxResult to find out what button was clicked on a MessageBox and take an appropriate action.

The following code snippet creates a MessageBox with a message, a title, and two OK and Cancel buttons.

 MessageBoxResult result = MessageBox.Show("Are you sure you want to delete this Deposit?",
                                    "Delete", MessageBoxButton.OKCancel);
      if (result == MessageBoxResult.OK)
      {
         // do if your result is OK
      } 
      else
      {
         // do if result is cancel
      }

Hope this help Smile

Friday, November 19, 2010

How Do I Set Textbox Focus in Silverlight4.0?

Here is an example to set focus for a text box in Silverlight application.

In Page.xaml

<UserControl x:Class="TextboxFocusTest.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Loaded="UserControl_Loaded" 
    Width="400" Height="300">
    <Grid x:Name="LayoutRoot" Background="White">        
        <StackPanel Width="150" VerticalAlignment="Center">            
            <TextBox x:Name="UserNameTextBox" IsTabStop="True" />    
        </StackPanel>        
    </Grid>
</UserControl>

In Page.xaml.cs

using System.Windows;
using System.Windows.Controls;
namespace TextboxFocusTest
{
    public partial class Page : UserControl
    {
        public Page()
        {
            InitializeComponent();
        }
        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
	   System.Windows.Browser.HtmlPage.Plugin.Focus();
           UserNameTextBox.Focus();
        }
    }
}

Happy Coding..Smile

Thursday, May 27, 2010

How to: Deploying Sliverlight applications in different machines

I am working on my silverlight application and i need to deploy the same on multiple machines as i need to test its performance on different servers.

Here is a small work around to do this.

  • Unzip the .XAP file in the clientBin folder of the website with WinRar or other archivator or Rename your XAP file to zip
  • Extract the zip file to a folder
  • Edit ServiceReference.ClientConfig in notepad
  • Here is the snippet of ServiceReference.ClientConfig.
<configuration>
    <system.serviceModel>
        <bindings>
            <customBinding>
                <binding name="CustomBinding_DPService" closeTimeout="00:10:00" openTimeout="00:10:00" sendTimeout="00:10:00"  receiveTimeout="00:10:00">
                    <binaryMessageEncoding />
                    <httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647">
                        <extendedProtectionPolicy policyEnforcement="Never" />
                    </httpTransport>
                </binding>
            </customBinding>
        </bindings>
        <client>
            <endpoint address="/SLSampleWebsite/DPService.svc" 
                binding="customBinding" bindingConfiguration="CustomBinding_DPService"
                contract="ServiceReference1.DPService" name="CustomBinding_DPService" />
        </client>
    </system.serviceModel>
</configuration>



  • Update the endpoint address in the XML with relevant address if its hosted in different machine or in the same machine.


  • Add the folder contents to ZIP file



            <endpoint address="http://Server1/SLSampleWebsite/DPService.svc" 



  • After updating the ServiceReference.ClientConfig, Compress all files again to create new .ZIP file.


  • Delete the old .XAP file and remame the .ZIP to XAP file



It works great!

Thursday, May 20, 2010

HEX to Color in Silverlight GridView

Recently i need to use colors in my grid cells, for that i have written code in RadGridView_RowLoaded to set the colors. But i had trouble setting color as background to cells. I could able to achieve this way.

 // Setting backgrounds to cells 
        private void RadGridView1_RowLoaded(object sender, Telerik.Windows.Controls.GridView.RowLoadedEventArgs e)
        {
            string strPirority = "";
            string strStage = "";
            if (e.Row.Item != null)
            {
                strPirority = ((TelerikOrderSilverlight.ServiceReference1.v_order_mgmt)(((Telerik.Windows.Controls.RadRowItem)(((Telerik.Windows.Controls.GridView.GridViewRowItemEventArgs)(e)).Row)).Item)).priority.ToString();
                if (((TelerikOrderSilverlight.ServiceReference1.v_order_mgmt)(((Telerik.Windows.Controls.RadRowItem)(((Telerik.Windows.Controls.GridView.GridViewRowItemEventArgs)(e)).Row)).Item)).stage != null)
                {
                    strStage = ((TelerikOrderSilverlight.ServiceReference1.v_order_mgmt)(((Telerik.Windows.Controls.RadRowItem)(((Telerik.Windows.Controls.GridView.GridViewRowItemEventArgs)(e)).Row)).Item)).stage.ToString();
                }               
                for (int i = 0; i < e.Row.Cells.Count; i++)
                {
                    if (e.Row.Cells[i].Column.UniqueName == "priority")
                    {
                        if (strPirority == "Critical")
                        {
                            // Can set this way using solid
                            e.Row.Cells[i].Background = new System.Windows.Media.SolidColorBrush(Colors.Red);
                        }
                    }
                    if (e.Row.Cells[i].Column.UniqueName == "MileStone")
                    {
                        if (strStage.Length > 0)
                        {
                            // You can set this way using Hexa codes.
                            if (strStage.Substring(0, 4) == "Bill")
                            {
                                e.Row.Cells[i].Background = new System.Windows.Media.SolidColorBrush(GetColorFromHexa("#FF000000"));
                            }
                        }
                    }
                }
            }
        }
        private Color GetColorFromHexa(string hexaColor)
        {
            return Color.FromArgb(
                    Convert.ToByte(hexaColor.Substring(1, 2), 16),
                    Convert.ToByte(hexaColor.Substring(3, 2), 16),
                    Convert.ToByte(hexaColor.Substring(5, 2), 16),
                    Convert.ToByte(hexaColor.Substring(7, 2), 16));
        }


Here is the list of all predefined SolidColorBrush objects.

Thursday, May 13, 2010

Configuring IIS for Silverlight Applications

Recently i want to deploy my Silverlight application Window 2003 Server. I have copied all the files and thought it will work as in development machine. But i am not able to run on Window 2003 server, so for that i need to configure my server to support silverlight.

Here is the URL that found helpful.

Friday, April 30, 2010

Handling large sets of data from WCF service in Silverlight application

I had the problem of handling data which is coming from my WCF web service to Silverlight application. When data is huge i got communication exception. I have googled on this and found a great article to handle huge amount of data.

Here is a great article by Syed Mehroz Alam. I found it very helpful.

Thursday, April 29, 2010

Debugging Silverlight applications

How to debug silverlight applications? Few of us will be having this problem and the issues is “Debugger not getting hit in the Silverlight project “. Here is the answer its pretty simple solution for this.

All Silverlight applications will have a hosting application which will be an ASP.NET web application or web site...

1. Right click the ASP.NET web application – -> Properties

2. In the properties window, select the tab Start Options.

3. In the debugger’s section, check the Silverlight checkbox.

image

4. Clik OK on the project properties window.

5. Hit F5. Now you will be able to debug the Silverlight project.

Hope this helps.

Wednesday, April 28, 2010

Key Press Event For Silverlight Textbox

This how we need to do to capture Key Press Event for Sliverlight text box. Attach KeyDown Event in XMAL code in MainPage.xaml file.

 

<TextBox x:Name="customer_name"

KeyDown="customer_name_KeyDown" VerticalAlignment="Top" TextWrapping="Wrap" FontSize="10.667" Width="120" Height="22"/>


In the codebehind you can check with the Key value like example shown below in MainPage.xaml.cs file.

private void customer_name_KeyDown(object sender, KeyEventArgs e)
        {
         
            if (e.Key == Key.Enter)
            {
                e.Handled = true;
            }
            else
            {
                e.Handled = false;
            }
        }
 

Unable to start debugging. The Silverlight managed debugging package isn’t installed.

If you installed latest version of Silverlight (Silverlight 4), it may break the your current silverlight development environment. After in the Silverlight 4 installation, if you try to debug any Silverlight 3 project, you will get a message from Visual Studio 2008, saying “Unable to start debugging. The Silverlight managed debugging package isn’t installed.”

image

To fix this error, install the Silverlight Developer Run time. You can get it from here : http://go.microsoft.com/fwlink/?LinkID=188039.

It worked for me. Hope this helps for you.