WCF DataContract-无法返回复杂类型

本文关键字:复杂 类型 返回 DataContract- WCF | 更新日期: 2023-09-27 18:22:05

我有一个WCF服务,它有返回对象的IEnumerable<T>集合的方法,还有一个复杂类型OrganizationCollection,它有几个属性,每个属性都是不同类型的IEnumerable<T>。我相信我已经正确地设置了我的服务合同,并正确地定义了我的类型DataContract/DataMember。返回OrganizationCollection的方法失败,并出现异常。我知道这个方法是有效的,因为我有单元和集成测试来测试它。只有在使用实时和部署的服务运行时,它才会失败。我甚至将类型指定为ServiceKnownType,但没有用。我需要做什么来配置服务,使其能够返回像OrganizationCollection这样的复杂类型?

注意:WCF服务与basicHttpBinding一起运行,并且位于Windows服务中的ServiceHost中。

[System.ServiceModel.CommunicationException]{"接收对的HTTP响应时出错http://localhost:8799/MyService.这可能是由于服务端点绑定未使用HTTP协议。这也可能是由于服务器中止了HTTP请求上下文(可能是由于服务关闭)。有关详细信息,请参阅服务器日志。"}System.ServiceModel.CommunicationException

[ServiceBehavior(IncludeExceptionDetailInFaults = true, AutomaticSessionShutdown = false, InstanceContextMode = InstanceContextMode.Single)]
[ServiceKnownType(typeof(OrganizationCollection))]
public class MyService: IClientService
{ 
    // ...
}
[ServiceContract]
public interface IClientService
{
    // This works:
    [OperationContract]
    IEnumerable<BookSvc> GetBooks(DateTime sinceDate);
    // This fails, with the above exception:
    [OperationContract]
    OrganizationCollection GetOrganizations(DateTime sinceDate);
}

CCD_ 11由CCD_ 12定义,并且每个属性具有CCD_。教师和学生课堂也是如此。属性都是基元类型。OrganizationCollection定义为:

[DataContract]
public class OrganizationCollection
{
    [DataMember]
    public IEnumerable<Teacher> Teachers { get; set; }
    [DataMember]
    public IEnumerable<Student> Students { get; set; }
}

WCF DataContract-无法返回复杂类型

有两个选项:

  1. 应使用具体的集合类型(List等)作为返回值,为WCF(数据契约中的集合类型,MSDN)提供序列化机制。

  2. 使用已知数据类型(data Contract known types,MSDN)。