我正在尝试使用一个导航属性IEnumerable<>传递DTO在它内部,当我传递一个没有子列表的对象时它运行良好,但是,当我传递带有子孙的对象时,WCF服务没有响应并且没有给我任何错误。我必须具体使用这种类型的对象吗?
这是我的数据合同
[ServiceContract]
public interface IProdutoService
{
[OperationContract]
CategoriaResponse GetCategoria(CategoriaRequest request);
[OperationContract]
ProdutoResponse GetProduto(ProdutoRequest request);
[OperationContract]
CategoriaResponse ManageCategoria(CategoriaRequest request);
[OperationContract]
ProdutoResponse ManageProduto(ProdutoRequest request);
}
//and then my DTO Class
public class ProdutoDto
{
#region Primitive Properties
[DataMember]
public Int32 Codigo { get; set; }
[DataMember]
public Int32 CodigoCategoria { get; set; }
[DataMember]
public String Descricao { get; set; }
[DataMember]
public Decimal? Preco { get; set; }
#endregion
#region Navigation Properties
[DataMember]
public CategoriaDto Categoria { get; set; }
[DataMember]
public VendaDto[] Vendas { get; set; }
#endregion
}
//我的服务配置如下所示:
<services>
<service behaviorConfiguration="behaviorAction" name="Uniarchitecture.ProdutoService.ServiceImplementations.ProdutoService">
<endpoint binding="wsHttpBinding" bindingConfiguration="bindingAction" contract="Uniarchitecture.ProdutoService.ServiceContracts.IProdutoService">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="behaviorAction">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<wsHttpBinding>
<binding name="bindingAction" transactionFlow="false" receiveTimeout="00:30:00" >
<reliableSession enabled="true"/>
</binding>
</wsHttpBinding>
</bindings>
答案 0 :(得分:0)
您的子对象可能未标记为可序列化。
它看起来好像你缺少DataContract属性。
从下面的评论中看起来你有一些不可序列化的对象。浏览您使用的所有对象,并使用serializable或data contract属性标记它们。
答案 1 :(得分:0)
您必须使用合同感知的循环引用。