Ошибка в WCF. Невозможно преобразовать группу методов «getAllEmpName» в тип без объекта «объект». Вы намеревались вызвать метод? - PullRequest
0 голосов
/ 10 марта 2012

Я новичок в WCF.Я сделал заявление, которое выглядит следующим образом:

У меня есть Служба следующим образом

void 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);
        DataSet ds = new DataSet();
        da.Fill(ds);
  }

Мой интерфейс выглядит следующим образом

[ServiceContract]
public interface IService1
{
    [OperationContract]
    void getAllEmpName();
    [OperationContract]
    void editEmployee();
}

На моей веб-странице япоступаю следующим образом

private void get_categories()
    {
        ServiceReference1.Service1Client ws = new ServiceReference1.Service1Client();
        GridView1.DataSource = ws.getAllEmpName();
        GridView1.DataBind();
 }

Я получаю сообщение об ошибке, поскольку Cannot convert method group 'getAllEmpName' to non-delegate type 'object'. Did you intend to invoke the method? может помочь любому

1 Ответ

2 голосов
/ 10 марта 2012

Первая проблема, которую я вижу, состоит в том, что ваш 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();
    }
}
...