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; }
}
有两个选项:
-
应使用具体的集合类型(List等)作为返回值,为WCF(数据契约中的集合类型,MSDN)提供序列化机制。
-
使用已知数据类型(data Contract known types,MSDN)。