我在解决方案中有两个项目: 项目A定义了一些类。 项目B是WCF项目,来自项目A的返回对象
在项目A中,我编写了一个函数来获取对象列表(Song)
public class SongRepository
{
private dbContext db = new dbContext();
public List<Song> getAll()
{
List<Song> songs = db.Songs.ToList();
return songs;
}
}
在项目B中,我编写了一个使用SongRepository获取对象列表的函数(Song)
public class Service1 : IService1
{
private SongRepository sr = new SongRepository();
public List<Song> getAllSong()
{
List<Song> songs = sr.getAll();
return songs;
}
}
和IService1类:
namespace webservice
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
[ServiceContract]
public interface IService1
{
[OperationContract]
List<Song> getAllSong();
}
}
结果是WCF项目没有返回歌曲列表。但是我已经在项目A中单独测试并返回真实数据(歌曲列表)
我不知道如何使用WCF从同一解决方案中的另一个项目获取数据。任何人都可以帮助我吗?
答案 0 :(得分:0)
我的问题已经解决了!谢谢你devdigital回答我。 解决方案是我使用适配器将业务对象转换为数据传输对象。其他人也遇到与我相同的问题:http://valueinjecter.codeplex.com/ 下载Omu.ValueInjecter dll。
在上面添加这个dll文件后,使用这两个函数将BO转换为DTO:
public T ConvertObjType<T>(object obj)
{
T instance = Activator.CreateInstance<T>();
if (obj != null)
StaticValueInjecter.InjectFrom((object)instance, new object[1]
{
obj
});
return instance;
}
public List<T> ConvertListObjType<G, T>(List<G> listObj)
{
if (listObj == null || listObj.Count == 0)
return (List<T>)null;
List<T> list = new List<T>();
typeof(T).GetProperties();
listObj[0].GetType().GetProperties();
foreach (G g in listObj)
{
object obj = (object)g;
T instance = Activator.CreateInstance<T>();
StaticValueInjecter.InjectFrom((object)instance, new object[1]
{
obj
});
list.Add(instance);
}
return list;
}
我希望这会帮助你。