C# 从WCF填充列表框
我在如何从WCF填充listbox方面做了很大的努力。这是我在尝试实现WCF之前使用的旧代码:C# 从WCF填充列表框,c#,wcf,listview,C#,Wcf,Listview,我在如何从WCF填充listbox方面做了很大的努力。这是我在尝试实现WCF之前使用的旧代码: lstProcesses.BeginUpdate(); lstProcesses.Items.Clear(); while (dr.Read()) { lstProcesses.Items.Add(dr.GetString(0)); } dr.Close(); con.Close()
lstProcesses.BeginUpdate();
lstProcesses.Items.Clear();
while (dr.Read())
{
lstProcesses.Items.Add(dr.GetString(0));
}
dr.Close();
con.Close();
lstProcesses.EndUpdate();*/
我的新尝试代码是:
public void ShowData2()
{
try
{
ServiceReference6.Service1Client obj6 = new ServiceReference6.Service1Client();
if (obj6.SelectSavedProcessInformation())
{
string passed = "";
lstProcesses.Items.Add(obj6);
}
else
{
string failed = "";
}
}
catch
{
}
}
我的WCF由以下内容组成:
public bool SelectSavedProcessInformation()
{
SqlConnection con = new SqlConnection(@"Data Source=localhost;Initial Catalog=WCFTest;Integrated Security=True;Pooling=False");
con.Open();
SqlCommand cmd = new SqlCommand("SELECT Processes FROM SaveProcesses", con);
var result = cmd.ExecuteReader();
if (result.HasRows)
{
con.Close();
return true;
}
else
{
con.Close();
return false;
}
}
}
我很确定我在这里做错了什么,因为列表框中充满了“loging.cs.servicereference6.Service1Client”
关于如何实现wcf有什么想法吗?通常,当我试图使用wcf从数据库获取数据时,我会将对象序列化为字符串,然后在客户端级别反序列化。从您的代码片段中,我想您应该返回一个DataTable,序列化它,然后在需要填充列表框时反序列化。我要做的是: 在IService接口中,我声明如下:
[OperationContract]
string GetDataTableFromDB();
public string GetDataTableFromDB()
{
// your code to retrieve from DB the DataTable
// there are plenty examples here in stackoverflow
// I will use "retrievedDataTable" name for the retrieved table
return Serialize<DataTable>(retrievedDataTable);
}
在您的Service.svc.cs文件中,我将实现如下内容:
[OperationContract]
string GetDataTableFromDB();
public string GetDataTableFromDB()
{
// your code to retrieve from DB the DataTable
// there are plenty examples here in stackoverflow
// I will use "retrievedDataTable" name for the retrieved table
return Serialize<DataTable>(retrievedDataTable);
}
在您的客户机中,我将调用拥有datatable的方法:
public void ShowData2()
{
try
{
ServiceReference6.Service1Client obj6 = new ServiceReference6.Service1Client();
DataTable table = Deserialize<DataTable>(obj6.SelectSavedProcessInformation());
if(table != null)
{
foreach(DataRow row in table.Rows)
{
// fill the listbox
}
}
public void ShowData2()
{
尝试
{
ServiceReference6.Service1Client obj6=新的ServiceReference6.Service1Client();
DataTable=反序列化(obj6.SelectSavedProcessInformation());
如果(表!=null)
{
foreach(table.Rows中的DataRow行)
{
//填写列表框
}
}
我使用的序列化和反序列化代码如下:
public class JsonHelper
{
public static string JsonSerializer<T>(object obj)
{
try
{
if (obj == null)
return null;
using (MemoryStream ms = new MemoryStream())
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
serializer.WriteObject(ms, obj);
ms.Position = 0;
using (StreamReader reader = new StreamReader(ms))
{
return reader.ReadToEnd();
}
}
}
catch { return null; }
}
public static T JsonDeserialize<T>(string source)
{
try
{
if (source == null)
return default(T);
using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(source)))
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
if (ms.Length == 0)
return default(T);
return (T)serializer.ReadObject(ms);
}
}
catch { return default(T); }
}
}
public类JsonHelper
{
公共静态字符串JsonSerializer(对象obj)
{
尝试
{
if(obj==null)
返回null;
使用(MemoryStream ms=new MemoryStream())
{
DataContractJsonSerializer=新的DataContractJsonSerializer(obj.GetType());
serializer.WriteObject(ms,obj);
ms.Position=0;
使用(StreamReader=新StreamReader(ms))
{
返回reader.ReadToEnd();
}
}
}
catch{return null;}
}
公共静态JsonDeserialize(字符串源)
{
尝试
{
if(source==null)
返回默认值(T);
使用(MemoryStream ms=new MemoryStream(Encoding.Unicode.GetBytes(source)))
{
DataContractJsonSerializer serializer=新的DataContractJsonSerializer(typeof(T));
如果(ms.Length==0)
返回默认值(T);
return(T)serializer.ReadObject(ms);
}
}
catch{返回默认值(T);}
}
}
我从未将DataTable与序列化一起使用过,但我希望它能工作我会试一试并让你知道。谢谢你的帮助如果你不理解某些内容,请告诉我确实可以,我只是尝试快速完成从wcf加载到文本框中的过程。一旦完成,我将尝试此解决方案:)它没有找到“Serialize”“Serialize”这只是我使用的一个名称!如果您使用的是我的JsonHelper类,您必须编写如下内容:“return JsonHelper.JsonSerializer