How to create and consume WCF Service in Silverlight?

SheoNarayan
Posted by in Silverlight category on for Beginner level | Points: 250 | Views : 21840 red flag

In this article, we are going to learn about how to work with Services in Silverlight.

Working with Services in Silverlight

As we know that Silverlight (being a sandbox technology) doesn’t support working directly with ADO.NET, it implies that you can’t use ADO.NET code like SqlConnection, SqlCommand or SqlDataAdapter to connect to the database and fetch records or manipulate records. So the only option left is to interact with the services (either web or wcf).

NOTE: In case you are creating services in different project than the Silverlight hosting project, you need to specify the client access policy (in the client/consumer project) and cross domain policy (in the server project).

This article is the continuation of my last article in Silverlight controls series, read last article here.

Get 500+ ASP.NET web development Tips & Tricks and ASP.NET Online training here.

Client access policy - clientaccesspolicy.xml

<?xml version="1.0" encoding="utf-8" ?>

<access-policy>

<cross-domain-access>

<policy>

<allow-from http-request-headers="*">

<domain uri="*" />

</allow-from>

<grant-to>

<resource path="/" include-subpaths="true" />

</grant-to>

</policy>

</cross-domain-access>

</access-policy>

Cross domain policy - crossdomain.xml

<?xml version="1.0"?>

<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">

<cross-domain-policy>

<allow-http-request-headers-from domain="*" headers="SOAPAction,Content-Type"/>

<!--<allow-http-request-headers-from domain="*" headers="*" secure="true" />-->

</cross-domain-policy>

How to create and consume WCF Service in Silverlight?

To create a WCF Service, right click the project (In my case I am creating in a separate project) and select WCF Service, enter name and click Add.

This will add DemoDatabaseWCFService.svc, DemoDatabaseWCFService.svc.cs and IDemoDatabaseWCFService.cs file. Add a new method called GetRecords into the Interface with OperationContract attribute (this attribute expose this method as service). Now write the implementation of this method as shown below in the DemoDatabaseWCFService.svc.cs.

public List<PersonWCF> GetRecords()

{

List<PersonWCF> list = new List<PersonWCF>();

using (SqlConnection conn = new SqlConnection(ConnStr))

{

using (SqlCommand cmd = new SqlCommand("SELECT * FROM PersonalDetail", conn))

{

conn.Open();

using (SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection))

{

while (reader.Read())

{

list.Add(new PersonWCF()

{

FirstName = reader.GetString(reader.GetOrdinal("FirstName")),

LastName = reader.GetString(reader.GetOrdinal("LastName")),

Age = reader.GetInt32(reader.GetOrdinal("Age")),

Active = reader.GetBoolean(reader.GetOrdinal("Active"))

});

}

}

}

}

return list;

}

Build the project and View the DemoDatabaseWCFService.svc in browser.

Now add a Silverlight page in the Silverlight project and retain the code snippet as below.

<StackPanel>

<Button Content="Get Data from Service" Click="Button_Click" />

<sdk:DataGrid x:Name="DataGrid1" />

<TextBlock x:Name="TextBlock1"/>

</StackPanel>

 

Add the reference of the WCF Service by right clicking the project and selecting “Add Service Reference…”

Give proper namespace and click OK.

Now write below code snippet in the Code behind of the Silverlight page.

private void Button_Click(object sender, RoutedEventArgs e)

{

DemoServicesSoapClient client = new DemoServicesSoapClient();

client.GetRecordsCompleted += new EventHandler<GetRecordsCompletedEventArgs>(client_GetRecordsCompleted);

client.GetRecordsAsync();

}

void client_GetRecordsCompleted(object sender, GetRecordsCompletedEventArgs e)

{

if (e.Error != null)

{

TextBlock1.Text = "Sorry, an error occured. " + e.Error.Message;

}

else

{

DataGrid1.ItemsSource = e.Result;

}

}

Before you do this, you need to add the namespace of the WCF Service namespace (in our case SilverlightDemo.DemoServiceReference)

Now run the Silverlight application.

Output

Hope this article was useful. Thanks for reading and hoping that you liked it.

Keep an eye on forth coming articles on Silverlight. To read my series of articles,click here.

Page copy protected against web site content infringement by Copyscape

About the Author

SheoNarayan
Full Name: Sheo Narayan
Member Level: HonoraryPlatinum
Member Status: Administrator
Member Since: 7/8/2008 6:32:14 PM
Country: India
Regards, Sheo Narayan http://www.dotnetfunda.com

Ex-Microsoft MVP, Author, Writer, Mentor & architecting applications since year 2001. Connect me on http://www.facebook.com/sheo.narayan | https://twitter.com/sheonarayan | http://www.linkedin.com/in/sheonarayan

Login to vote for this post.

Comments or Responses

Posted by: Skshoeb on: 8/25/2014 | Points: 25
http://skshoebahmed.blogspot.com/2014/08/insertupdate-and-view-details-using.html

Login to post response

Comment using Facebook(Author doesn't get notification)