私は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;
}
}