0

我在一个解决方案中有两个项目:项目 A 定义了一些类。项目 B 是 WCF 项目并从项目 A 返回对象

在项目 A 中,我编写了一个函数来获取对象列表(宋)

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 从同一解决方案中的另一个项目获取数据。谁能帮我?

在此处输入图像描述

4

1 回答 1

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

我希望这可以帮助你。

于 2013-05-05T18:04:53.427 回答