WCF无法在同一解决方案中从其他项目获取对象

时间:2013-05-04 09:24:53

标签: wcf asp.net-mvc-4

我在解决方案中有两个项目: 项目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从同一解决方案中的另一个项目获取数据。任何人都可以帮助我吗?

enter image description here

1 个答案:

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

我希望这会帮助你。