0

私のService1.svcファイル内には、次のものがあります。

[OperationContract]
public List<Accounts> GetAllAccounts()
{
    string Conn = "......";
    List<Accounts> Accs = new List<Accounts>();

    SqlConnection _con = new SqlConnection(Conn);
    SqlCommand sc = new SqlCommand("SQL QUERY....", _con);
    SqlDataReader reader;

    _con.Open();
    reader = sc.ExecuteReader();
    while (reader.Read()) { Accs.Add(new Accounts() { Name = reader["Name"].ToString(), Qty = Convert.ToInt32(reader["Qty"]), Weight = Convert.ToDecimal(reader["Weight"]), Value = Convert.ToDecimal(reader["Value"]) }); }
    _con.Close();

    return Accs.ToList();
}

public class Accounts
{
    public string Name { get; set; }
    public int Qty { get; set; }
    public decimal Weight { get; set; }
    public decimal Value { get; set; }
}

SQL が正しいことはわかっており、データが存在することを確認するためにこのリストの内容を画面に出力しましたが、ブラウザでサービスを実行しようとすると失敗します。

これは、私のIService.csが返された 'List' コントロールと競合しているためだと思います。私が得るエラーは次のとおりです。

私の Service1.GetAllAccounts() メソッドは、一致する 'System.....List' の戻り値の型を持たないため、私の IService1.GetAllAccounts() を実装できません。

IService1.cs;

[ServiceContract]
    public interface IService1
{

    [OperationContract]
    List<Accounts> GetAllAccounts();
}

public class Accounts
{
    public string Name { get; set; }
    public int Qty { get; set; }
    public decimal Weight { get; set; }
    public decimal Value { get; set; }
}

この問題は非常に単純に聞こえますが、私は C# にかなり慣れていません。

4

4 に答える 4

2

関連する部分を省略したエラーは、問題を示しています。

私の Service1.GetAllAccounts() メソッドは、「 System.....List 」の一致する戻り値の型を持たないため、私の IService1.GetAllAccounts() を実装できません。

2 つのAccountsクラスがあり、1 つはサービス インターフェイスにあり、もう 1 つは実装にあります。それらはおそらく異なる名前空間にもあります。したがって、インターフェイスにはメソッドが含まれています。

List<Accounts(FromInterface)> GetAllAccounts();

そして、あなたの実装にはメソッドがあります:

List<Accounts(FromImplementation)> GetAllAccounts()

List<Accounts(FromInterface)>ではないため、これによりエラーが発生しますList<Accounts(FromImplementation)>

クラスを別のファイルに作成Accountsし、インターフェイスと実装が同じAccounts型を参照していることを確認してください。

于 2013-08-07T12:11:39.120 に答える
1

Accounts()何らかの理由で、サービスによって返されるタイプは配列 ( )しかありません。

関数でF12(定義に移動) を押すと、ではservice.GetAllAccounts();なく が返されることがわかります。Accounts()List<Accounts>

電話するだけservice.GetAllAccounts().ToList;で問題が解決するはずです。


また、すでにインターフェイスにあるため、Accountsクラスを再宣言する必要はありません。Service1.svc.csIService.cs


編集:クラスも実装する必要があるかもしれません:

public List<Accounts> GetAllAccounts() : IService1 {
    ...
}
于 2013-08-07T12:12:31.550 に答える