Step 1:
Open SQL Server
management studio, then open new query editor and do the following operations,
--command to
create new database
create database BookDB
--Shift to
BookDB databse from Master DB
use BookDB
--Query to
create new tables with colums
create table BookInfo(
book_id int primary key,
book_name varchar(25),
book_author varchar(25),
book_publisher varchar(25),
book_price varchar(10),
book_availability bit
)
--Query to check
any values in BookInfo table
select * from BookInfo
--Inserting
first record into BookInfo table
insert into BookInfo(book_id,book_name,book_author,
book_publisher,book_price,book_availability)
values('1','ASP.NET','Michel Angel','TKL Publication',
'255.50',1)
--Query to check
any values in BookInfo table
select * from BookInfo
--Inserting
second record into BookInfo table
insert into BookInfo(book_id,book_name,book_author,
book_publisher,book_price,book_availability)
values('2','C#.NET','Kuttan Pilla','Pilla Publication',
'655.50',1)
--Query to check
any values in BookInfo table
select * from BookInfo
--Inserting third record into BookInfo table
insert into BookInfo(book_id,book_name,book_author,
book_publisher,book_price,book_availability)
values('3','SQL Server 2012','Moudin Kunjalli','Abud Publication',
'659.50',1)
--Query to check
any values in BookInfo table
select * from BookInfo
Step 2:
Create a WCF service Library and name it as WCFBookService
and delete the default IServices interface ,Service class and App.conf files .
Step 3:
Create a new public class called BookReqEntity.cs and add System.Runtime.Serialization reference.
#region Using
Statements
using System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Runtime.Serialization;
#endregion
namespace
WCFBookService
{
/// <summary>
/// BookReqEntity class is used for requesting book info on
the criteria BookID
/// </summary>
[DataContract]
public class BookReqEntity
{
#region Public Properties
[DataMember]
public int BookID
{
get;
set;
}
#endregion
}
}
Step 4:
Create a public
class called BookResEntity.cs and add the following
#region Using Statements
using System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Runtime.Serialization;
#endregion
namespace
WCFBookService
{
/// <summary>
/// BookResEntity class is used for deliver book info on the
criteria BookID
/// </summary>
[DataContract]
public class BookResEntity
{
#region Public Properties
[DataMember]
public int BookID
{
get;
set;
}
[DataMember]
public string BookName
{
get;
set;
}
[DataMember]
public string BookAuthor
{
get;
set;
}
[DataMember]
public string BookPublisher
{
get;
set;
}
[DataMember]
public string BookPrice
{
get;
set;
}
[DataMember]
public bool BookAvailability
{
get;
set;
}
#endregion
}
}
Step 5:
Create an interface named it as IBook and add System.ServiceModel
#region Using
Statements
using System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.ServiceModel;
#endregion
namespace
WCFBookService
{
[ServiceContract]
interface IBook
{
[OperationContract]
BookResEntity
GetBookInfo(BookReqEntity bookReqEntity);
}
}
Step 6:
Add a application configuration file to the
current application and modify to
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add
name="conStr" connectionString="Data Source=.;Initial
Catalog=BookDB;User ID=sa;Password=abc"/>
</connectionStrings>
</configuration>
Step 7:
Create its implemetation and named it as Book.cs also make it as public.
Add three additional
namespaces
a) System.ServiceModel
b) System.Configuration
c) System.Data.SqlClient
#region Using
Statements
using System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using System.ServiceModel;
using
System.Configuration;
using
System.Data.SqlClient;
#endregion
namespace
WCFBookService
{
[ServiceBehavior]
public class Book : IBook
{
[OperationBehavior]
public BookResEntity GetBookInfo(BookReqEntity
bookReqEntity)
{
BookResEntity
bookResEntity = null;
string
Cstring = ConfigurationManager.ConnectionStrings["conStr"].ConnectionString;
using
(SqlConnection con = new SqlConnection(Cstring))
{
con.Open();
string
query = String.Format("select * from BookInfo where book_id ={0}",
bookReqEntity.BookID);
SqlCommand
cmd = new SqlCommand(query,
con);
SqlDataReader
dr = cmd.ExecuteReader();
while
(dr.Read())
{
bookResEntity = new BookResEntity()
{
BookID =
dr.GetInt32(0),
BookName =
dr.GetString(1),
BookAuthor = dr.GetString(2),
BookPublisher =
dr.GetString(3),
BookPrice =
dr.GetString(4),
BookAvailability =
dr.GetBoolean(5)
};
}
};
return
bookResEntity;
}
}
}
Step 8:
Add another console application and named it as
CustomerHost and make it
as public
Add reference –WCFBookService
#region Using
Statements
using System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
WCFBookService;
using
System.ServiceModel;
#endregion
namespace BookHost
{
public class BookHostClass
{
static void Main(string[]
args)
{
ServiceHost
sHost = null;
Type
t = null;
try
{
t = typeof(Book);
sHost = new ServiceHost(t);
sHost.Opened += delegate(object
sender, EventArgs er)
{
Console.WriteLine("Book Service Hosted Successfully");
};
sHost.Closed += delegate(object sender,
EventArgs er)
{
Console.WriteLine("Book Service closed Successfully");
};
sHost.Open();
Console.ReadLine();
}
catch
(Exception e)
{
Console.WriteLine(e.Message);
Console.ReadLine();
}
finally
{
if
(sHost != null && sHost.State != CommunicationState.Closed)
{
sHost.Close();
Console.ReadLine();
}
}
}
}
}
Step 9:
Add a appconfig file and specify connection
string
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add
name="conStr" connectionString="Data Source=.;Initial
Catalog=BookDB;User ID=sa;Password=abc"/>
</connectionStrings>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior
name="BookBehaviour">
<serviceDebug
/>
<serviceMetadata
httpGetEnabled="true" httpGetUrl="http://localhost:8811/BookServiceAddress/Mex" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service
behaviorConfiguration="BookBehaviour" name="WCFBookService.Book">
<endpoint
address="http://localhost:8811/BookServiceAddress"
binding="basicHttpBinding" bindingConfiguration="" name="BookServiceEndPoint"
contract="WCFBookService.IBook"
/>
</service>
</services>
</system.serviceModel>
</configuration>
Then do the proccess same like
Step 10:
Add another Client Console application which act as UI/Client ,name it as BookClient
Do the steps .
a) Add Service refence your hosted application.
b)Open debug folder of hosted application.Click BookHost.exe.Do not close it just minimize it.
c) Add service reference ,specify
http://localhost:8811/BookServiceAddress/Mex
Step 11:
On the client
Program.cs file edit code like this
using System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
ClientConsole.BookServiceReference;
namespace
ClientConsole
{
class Program
{
static void Main(string[]
args)
{
using
(BookClient b = new
BookClient())
{
BookReqEntity
bReq = new BookReqEntity();
Console.WriteLine("Enter the Book Id");
int
bId = Convert.ToInt32(Console.ReadLine());
bReq.BookID = bId;
BookResEntity
bRes = new BookResEntity();
bRes = b.GetBookInfo(bReq);
if
(bRes != null)
{
Console.Write("Book Id:{0},\nBook Name:{1},\nBook Author
:{2},\nBookPublisher :{3},\nBook Price{4},\nBook Availability:{5}",
bRes.BookID, bRes.BookName, bRes.BookAuthor, bRes.BookPublisher,
bRes.BookPrice,
bRes.BookAvailability);
Console.ReadLine();
}
Console.WriteLine("Search book not found!");
Console.ReadLine();
};
}
}
}
Debug Operations:
First debug the host
application,then your client console application.
Great work Marrit. really helpfull. Thanks.
ReplyDeletenice post... thanks
ReplyDeleteGood Work.. thank you
ReplyDeleteGood tutorial...Please continue this work
ReplyDeleteGood Work ..thnks....marrit john
ReplyDeleteGood Work Thank You...
ReplyDelete