1

私はWCFにかなり慣れていないので、少し説明したいと思います。WCF からを返そうとしてList<T>いますが、それを使用しようとするとエラーが発生します。T[]の型に変換できませんList<T>。以下のサンプル。

質問:これは、WCF が複数のテクノロジで使用され、配列に変換される可能性があるためですか?

インターフェース:

[ServiceContract]
public interface I_UI_Service
{
    [OperationContract]
    List<Site> Get_Sites(string ntid);
}

[DataContract]
[Serializable]
public class Site
{
    public Site(int id, string description)
    {
        this.ID = id;
        this.Description = description;
    }

    [DataMember]
    public int ID { get; set; }

    [DataMember]
    public string Description { get; set; }
}

コード:

    public List<Site> Get_Sites(string ntid)
    {
        List<Site> returnList = new List<Site>();
        using (SqlCommand cmd = new SqlCommand())
        {
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "SPROC_Name";
            cmd.Parameters.AddWithValue("@NTID", ntid);
            using (SqlConnection conn = new SqlConnection(DB_ConnectionString()))
            {
                cmd.Connection = conn;
                conn.Open();
                SqlDataReader reader = cmd.ExecuteReader();

                while (reader.Read())
                {
                    returnList.Add(new Site(Convert.ToInt16(reader["SiteID"]), reader["SiteDescription"].ToString()));
                }
                conn.Close();
            }
        }
        return returnList;
    }

リストを使用した消費: (エラー)

    List<Site> _Sites;

    public List<Site> Sites
    {
        get
        {
            if (_Sites == null)
            {
                UI_Data.I_UI_ServiceClient sc = new UI_Data.I_UI_ServiceClient();
                _Sites = sc.Get_Sites("MyInfo");
            }
            return _Sites;
        }
    }

T[ ] を使用した消費: (それが機能し、なぜ私の質問なのか)

    Site[] _Sites;

    public Site[] Sites
    {
        get
        {
            if (_Sites == null)
            {
                UI_Data.I_UI_ServiceClient sc = new UI_Data.I_UI_ServiceClient();
                _Sites = sc.Get_Sites("MyInfo");
            }
            return _Sites;
        }
    }
4

1 に答える 1

5

WCF はジェネリック リストを配列としてシリアル化しますが、サービス参照を追加するときに詳細ボタンをクリックすると、それらをジェネリック リストに戻すことができます (ドロップダウンには既定で配列が設定されていることがわかりますが、それらをリストに変更することができます)。 .

このオプションを使用すると、ネットワーク経由で送信された配列は、使用できる汎用リストに変換されます。情報の送信方法は変わりません。

于 2012-10-18T01:07:42.287 に答える