如何从restful WCF服务返回对象列表

时间:2014-12-08 04:08:56

标签: c# entity-framework wcf wcf-rest

我正在尝试从我的Restful WCF服务返回一个对象列表。我正在使用实体框架。问题是,当WCF服务运行时,如果我在其上放置一个调试器,那么调试器将被访问两次,我得到一个404服务器未找到错误。为什么会这样?

如果我返回一个与class(db table)没有关系的class(DB table)返回,那么它将返回列表,但如果我必须返回class(DB table),那么我会得到一个404错误。

界面:

[OperationContract]
[WebInvoke(Method = "GET", UriTemplate = "GetDataString/{value}",RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
List<Course> GetDataString(string value);

实现:

public List<Course> GetDataString(string value)
{
    int v = Convert.ToInt32(value);
    TestEntities1 t = new TestEntities1();
    List<Course> u = t.Courses.ToList();
    return u;
}

可能是什么问题。?此处Courses排列为student table

当我编写用于获取相同数据的ADO.NET代码时,它可以正常工作。

然后在调试器执行了两次之后,我得到了一个找不到服务器的错误页面,并且URL从

更改
http://localhost:5127

http://www.localhost.com:5127/Service1.svc/GetDataString/1/Service1.svc/GetDataString/1

我也启用了跟踪,我收到以下异常。我不知道这个例外是什么。请帮忙。

System.Runtime.Serialization.SerializationException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

异常的堆栈跟踪消息:

Type 'System.Data.Entity.DynamicProxies.Course_4B21E9E950AEFDC2233FE771C1BFE0ABF63D591A6487C93CBD145965FB96EA11' with data contract name 'Course_4B21E9E950AEFDC2233FE771C1BFE0ABF63D591A6487C93CBD145965FB96EA11:http://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies' is not expected. Consider using a DataContractResolver or add any types not known statically to the list of known types - for example, by using the KnownTypeAttribute attribute or by adding them to the list of known types passed to DataContractSerializer.

以下是我的课程课程:

namespace JSONWebService
{
    [DataContract]
    public partial class course
    {
        public Course()
        {
            this.Students = new HashSet<Student>();
        }

        [DataMember]
        public int C_Id { get; set; }

        [DataMember]
        public string C_Name { get; set; }

        public virtual ICollection<Student> Students { get; set; }
    }
}

2 个答案:

答案 0 :(得分:0)

您的服务不知道如何序列化course课程。您是否添加了[DataContract][DataMember]属性?你能发布一下它的样子吗?

答案 1 :(得分:0)

默认情况下,您无法在WCF服务器和客户端之间传输对象作为其基本类型。 DataContractSerializer在尝试序列化基类时会抛出异常,您可以在here

中找到有关您的问题的好文章