In this article I will explain with an example, how to call (consume) WCF Service (SVC) without creating Proxy in ASP.Net using C# and VB.Net.
The WCF Service (SVC) can be called (consumed) without creating Proxy by making use of the ChannelFactory class in ASP.Net.
 
 
Database
I have made use of the following table Customers with the schema as follows.
Call (Consume) WCF Service (SVC) without creating Proxy in ASP.Net
 
I have already inserted few records in the table.
Call (Consume) WCF Service (SVC) without creating Proxy in ASP.Net
 
Note: You can download the database table SQL by clicking the download link below.
          Download SQL file
 
 
Adding Service to Project
The very first thing you need to do is add a WCF service to your project by clicking on Add New Items as shown below.
Call (Consume) WCF Service (SVC) without creating Proxy in ASP.Net
 
 
Building the WCF Service
The next task is to add the OperationContract method to the WCF Service that will fetch the records from the database and will act as a source of data for the GridView.
Namespaces
You will need to import the following namespaces.
C#
using System.Data;
using System.Configuration;
using System.Data.SqlClient;
using System.ServiceModel;
using System.Runtime.Serialization;
 
VB.Net
Imports System.Data
Imports System.Configuration
Imports System.Data.SqlClient
Imports System.ServiceModel
Imports System.Runtime.Serialization
 
IService Interface
The IService Interface class has a DataContract class named CustomerData which contains a DataTable Property CustomersTable which will be used to send the data from the WCF Service to the Web Application.
The IService Interface has a method GetCustomers which is decorated with OperationContract attribute.
C#
[ServiceContract]
public interface IService
{
    [OperationContract]
    CustomerData GetCustomers(int customerId);
}
 
[DataContract]
public class CustomerData
{
    public CustomerData()
    {
        this.CustomersTable = new DataTable("CustomersData");
    }
 
    [DataMember]
    public DataTable CustomersTable { get; set; }
}
 
VB.Net
<ServiceContract()> _
Public Interface IService
    <OperationContract()> _
    Function GetCustomers(customerId As Integer) As CustomerData
End Interface
 
<DataContract()> _
Public Class CustomerData
    Public Sub New()
        Me.CustomersTable = New DataTable("CustomersData")
    End Sub
 
    <DataMember()> _
    Public Property CustomersTable() As DataTable
        Get
            Return m_CustomersTable
        End Get
        Set(value As DataTable)
            m_CustomersTable = value
        End Set
    End Property
    Private m_CustomersTable As DataTable
End Class
 
Service Class
The IService Interface has been implemented in a class named Service which contains the definition of the GetCustomers method.
This method gets the records from the Customers table and populates the DataTable of the CustomerData class object which finally is returned to the client accessing the WCF service.
C#
public class Service : IService
{
    public CustomerData GetCustomers(int customerId)
    {
        string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
        using (SqlConnection con = new SqlConnection(constr))
        {
            string sql = "SELECT CustomerId, Name, Country FROM Customers";
            if (customerId > 0)
            {
                sql += " WHERE CustomerId = @CustomerId";
            }
            using (SqlCommand cmd = new SqlCommand(sql))
            {
                using (SqlDataAdapter sda = new SqlDataAdapter())
                {
                    cmd.Connection = con;
                    if (customerId > 0)
                    {
                        cmd.Parameters.AddWithValue("@CustomerId", customerId);
                    }
                    sda.SelectCommand = cmd;
                    using (DataTable dt = new DataTable())
                    {
                        CustomerData customers = new CustomerData();
                        sda.Fill(customers.CustomersTable);
                        return customers;
                    }
                }
            }
        }
    }
}
 
VB.Net
Public Class Service
    Implements IService
    Public Function GetCustomers(customerId As Integer) As CustomerData Implements IService.GetCustomers
        Dim constr As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
        Using con As New SqlConnection(constr)
            Dim sql As String = "SELECT CustomerId, Name, Country FROM Customers"
            If customerId > 0 Then
                sql += " WHERE CustomerId = @CustomerId"
            End If
            Using cmd As New SqlCommand(sql)
                Using sda As New SqlDataAdapter()
                    cmd.Connection = con
                    If customerId > 0 Then
                        cmd.Parameters.AddWithValue("@CustomerId", customerId)
                    End If
                    sda.SelectCommand = cmd
                    Using dt As New DataTable()
                        Dim customers As New CustomerData()
                        sda.Fill(customers.CustomersTable)
                        Return customers
                    End Using
                End Using
            End Using
        End Using
    End Function
End Class
 
 
HTML Markup
The HTML Markup consists of a TextBox, a Button and a GridView.
CustomerId:
<asp:TextBox ID="txtCustomerId" runat="server" />
<asp:Button ID="btnSearch" Text="Search" runat="server" OnClick="Search" />
<hr />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
    <Columns>
        <asp:BoundField DataField="CustomerId" HeaderText="Customer Id" ItemStyle-Width="150" />
        <asp:BoundField DataField="Name" HeaderText="Name" ItemStyle-Width="150" />
        <asp:BoundField DataField="Country" HeaderText="Country" ItemStyle-Width="100" />
    </Columns>
</asp:GridView>
 
 
Call (Consume) WCF Service without adding Service Reference
The GetServiceClient method
The GetServiceClient method is used to access the WCF Service without adding its Service Reference. Inside this method, first an object of BasicHttpBinding is created and then an object of EndPointAddress is created using the URL of the WCF service which is passed as parameter to its Constructor.
Note: You can get the URL of the WCF Service by right clicking the Service.svc file from the Solution Explorer and then clicking the View in Browser option from the context menu.
 
Now these two objects i.e. BasicHttpBinding and EndPointAddress are passed as parameter to the CreateChannel method of the ChannelFactory class which returns the object of type IService i.e. the interface of WCF service.
 
Page Load
Inside the Page Load event handler, the object of type IService interface is returned by the GetServiceClient method.
Using the object of type IService interface, the GetCustomers method is accessed and the customerId parameter value is passed 0 which fetches all the records present in the database table.
The fetched records are present in the CustomersTable DataTable which is ultimately used to populate the GridView control.
 
Button Click
Inside the Button Click event handler, the object of type IService interface is returned by the GetServiceClient method.
Using the object of type IService interface, the GetCustomers method is accessed and the value of the CustomerId TextBox is passed as parameter which fetches the specific records present in the database table based on CustomerId.
The fetched record is present in the CustomersTable DataTable which is ultimately used to populate the GridView control.
C#
protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        IService client = this.GetServiceClient();
        GridView1.DataSource = client.GetCustomers(0).CustomersTable;
        GridView1.DataBind();
    }
}
 
protected void Search(object sender, EventArgs e)
{
    int customerId;
    int.TryParse(txtCustomerId.Text.Trim(), out customerId);
    IService client = this.GetServiceClient();
    GridView1.DataSource = client.GetCustomers(customerId).CustomersTable;
    GridView1.DataBind();
}
 
private IService GetServiceClient()
{
    BasicHttpBinding binding = new BasicHttpBinding();
    EndpointAddress endpoint = new EndpointAddress("http://localhost:8744/CS/Service.svc");
    IService client = ChannelFactory<IService>.CreateChannel(binding, endpoint);
    return client;
}
 
VB.Net
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    If Not Me.IsPostBack Then
        Dim client As IService = Me.GetServiceClient()
        GridView1.DataSource = client.GetCustomers(0).CustomersTable
        GridView1.DataBind()
    End If
End Sub
 
Protected Sub Search(sender As Object, e As EventArgs)
    Dim customerId As Integer
    Integer.TryParse(txtCustomerId.Text.Trim(), customerId)
    Dim client As IService = Me.GetServiceClient()
    GridView1.DataSource = client.GetCustomers(customerId).CustomersTable
    GridView1.DataBind()
End Sub
 
Private Function GetServiceClient() As IService
    Dim binding As New BasicHttpBinding()
    Dim endpoint As New EndpointAddress("http://localhost:8747/VB/Service.svc")
    Dim client As IService = ChannelFactory(Of IService).CreateChannel(binding, endpoint)
    Return client
End Function
 
 
Screenshot
Call (Consume) WCF Service (SVC) without creating Proxy in ASP.Net
 
 
Demo
 
 
Downloads