Первая проблема, которую я вижу, состоит в том, что ваш getAllEmpName()
метод - void
.Ничего не возвращаетОн не будет отправлять данные обратно клиенту.
Передача DataSet
через WCF также не всегда является лучшей идеей.Один DataTable
будет немного лучше, но лучше будет возвращать List<>
или массив.Однако попробуйте что-то вроде:
// Service
DataTable IService1.getAllEmpName()
{
SqlConnection con = new SqlConnection("Data Source=SYSTEM19\\SQLEXPRESS;Initial Catalog=Dora;Integrated Security=True");
SqlCommand cmd = new SqlCommand("Select *from Users", con);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
dt.Fill(dt);
return dt;
}
[ServiceContract]
public interface IService1
{
[OperationContract]
DataTable getAllEmpName();
[OperationContract]
void editEmployee();
}
// Client
private void get_categories()
{
ServiceReference1.Service1Client ws = new ServiceReference1.Service1Client();
DataTable data = ws.getAllEmpName();
GridView1.DataSource = data;
GridView1.DataBind();
}
Я также вернулся и перечитал это, и заметил, что вы не избавляетесь от своего клиента WCF.Это плохо !Если клиенты WCF не прерваны или не закрыты должным образом, они могут продолжать использовать ресурсы и будут держать соединение открытым до тех пор, пока не будет собрана сборка мусора.Существует множество других дискуссий по этой теме, которые вы можете искать.
Поскольку ClientBase
реализует IDisposable
, вы должны явно избавиться от него.Что-то вроде:
using(ServiceReference1.Service1Client ws = new ServiceReference1.Service1Client())
{
try
{
// use the "ws" object...
}
finally
{
if(ws.State == CommunicationState.Faulted)
ws.Abort();
else
ws.Close();
}
}