WCF - 远程主机强制关闭现有连接

时间:2016-05-01 03:23:44

标签: c# wcf

您好我在客户端收到此错误时尝试使用此WCF服务 我在网上搜索了一些解决方案,但是他们提出了循环依赖和无法序列化复杂对象的情况,这对我来说并非如此

我尝试发送的DataContract

[DataContract]
public class CapitalDTO
{
    [DataMember]
    public string ItemName { get; set; }
    [DataMember]
    public string ItemSize { get; set; }
    [DataMember]
    public string ItemBranch { get; set; }
    [DataMember]
    public double ItemPrice { get; set; }
    [DataMember]
    public int ItemCount { get; set; }
    [DataMember]
    public double Capital
    {
        get
        {
            return (double)ItemCount * ItemPrice;
        }
    }

}

那是尝试发送它的服务<​​/ p>

    public IEnumerable<CapitalDTO> GetCapital(int? BranchId = null)
    {
        using (var scope = container.BeginLifetimeScope())
        {
            unitOfWork = scope.Resolve<IUnitOfWork>();
            var capital = unitOfWork.ItemsInBrranches.GetItemsInBranchesByBranch(BranchId).Select(c => new CapitalDTO
            {
                ItemBranch = c.Branch.Name,
                ItemName = c.Item.Name,
                ItemPrice = c.Item.Price,
                ItemSize = c.Item.Size.Size,
                ItemCount = c.Amount
            });
            return capital;
        }
    }

因为我仍然被认为是WCF的新手,我不确定我的问题在哪里,我需要一些帮助

更新 只有返回对象的方法才会返回此异常,因此我猜测它可能是所有0之后的序列化问题

2 个答案:

答案 0 :(得分:0)

猜测 - 我怀疑所有属性都需要公共设置器,以便反序列化可以在客户端进行。由于'Capital'是一个计算属性,我建议完全删除它,或者在其中添加一个'虚拟'Setter,只有解串器会调用它,并且实际上不会做任何事情。

答案 1 :(得分:0)

显然,问题在于解决生活范围内的单元工作依赖性,似乎在WCF服务完成之前它与DbContext一起被处理

public IEnumerable<CapitalDTO> GetCapital(int? BranchId = null)
{
        unitOfWork = container.Resolve<IUnitOfWork>();
        var capital = unitOfWork.ItemsInBrranches.GetItemsInBranchesByBranch(BranchId).Select(c => new CapitalDTO
        {
            ItemBranch = c.Branch.Name,
            ItemName = c.Item.Name,
            ItemPrice = c.Item.Price,
            ItemSize = c.Item.Size.Size,
            ItemCount = c.Amount
        });
        return capital;
}

另外一件事,正如C. Knight所指出的那样,我应该定义一个公共设置器,以便将Capital属性序列化