WCF错误“序列不包含任何元素” - “收集超出固定大小”

时间:2012-11-06 08:06:24

标签: c# wcf windows-services nettcpbinding

我是WCF的新手。我开始创建一个WCF项目,将人们的信息保存在EF数据库中。

我有很多错误并通过在各种网站中搜索来修复它们,但最近我被一些错误所阻止,无法修复它们。

我的项目是 n层,包含实体框架数据模型。服务器有4层。

DAL (包含EF dataModel) - > BLL (插入/更新/删除功能的类库) - > 服务层(wcf类库) - > 主机层(Windows服务)

我在Windows服务中托管我的服务。服务绑定是nettcpbinding。我配置服务是真的,所以这里没问题。

我有一个名为“Common”(类库)的项目,所有4个项目都可以访问它,正如您所知,我创建了一个代码生成器并将生成的类粘贴到common。(使用DAL分隔类模型)。

现在cient只有(Host Layer)服务reference.in客户端,我在服务类中有所有实体类。

当我想将对象插入数据库时​​,会出现问题。请参阅以下代码:

服务器端(这是BLL和服务层):

namespace BLL
{
    public static class bz
    {
        public static class People
        {
            public static void myInsert(Common.People p, out bool Result)
            {
                Result = false;

                Common.EFContainer cntx = new Common.EFContainer();
                cntx.ContextOptions.ProxyCreationEnabled = false;
                cntx.ContextOptions.LazyLoadingEnabled = false;

                if (p.FirstName == "" || p.FirstName == null)
                {
                   throw new Exception("Fill Fist Name") ;
                }
                //  ... more validate
                //-->I Do not use first or single etc in validating<--
                try
                {

                    cntx.Peoples.AddObject(p);
                    cntx.SaveChanges();
                    Result = true;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }
        public static class Gender
        {
             public static List<Common.Gender> GetData()
             {
                Common.EFContainer cntx = new Common.EFContainer();
                cntx.ContextOptions.ProxyCreationEnabled = false;
                cntx.ContextOptions.LazyLoadingEnabled = false;

                return cntx.Genders.ToList();
             }
        }
    }
}

namespace ServiceLayer
{

[ServiceContract(SessionMode = SessionMode.Required)]
public interface IService
{
    [FaultContract(typeof(NormalExeption))]
    [OperationContract]
    bool AddToPeople(Common.People p);

    [OperationContract]
    List<Common.Gender> GetGenders();
}

  [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode =     System.ServiceModel.ConcurrencyMode.Single)]
 public class myService : IService
 {
    [OperationBehavior]
    public bool AddToPeople(Common.People p)
    {
      try
        {
            BLL.bz.People.myInsert(p, out result);

             return result;
        }
        catch (Exception ex)
        { 
           var exep = new NormalExeption(ex.Message, ex.Source, 0, Icons.Error);
           throw new FaultException<NormalExeption>(exep, new FaultReason(new FaultReasonText(ex.Message)));
        }
    }
    [OperationBehavior]
    public  List<Common.Gender> GetGenders()
    {
       return BLL.bz.Gender.GetData();
    }
 }

}

客户端:

ServiceRef.People p = new ServiceRef.People();
ServiceRef.myServiceClient client=new ServiceRef.myServiceClient();

p.FirstName="S";

//... Fill Other Fields 

p.Childs=new List<ServiceRef.Child>();
p.Childs.Add(new ServiceRef.Child(){FirstName="A"});

p.Gender=client.GetGenders.first();

//... --->No Error Happen Till Here Error Is After This in Service<---


try
{
  client.AddToPeople(p);
}
Catch(FaultException fe)
{
  messagebox.show(fe.Detail.Message);
}

我的问题:

插入人物对象后,两个错误都发生在客户端。

当我使用Poco Code Generator For My EF时,我收到此错误:

  

收藏超出固定尺寸

poco类定义中会出现此错误。

当我使用自动跟踪代码生成器时,我收到此错误:

  

序列不包含元素

我认为contex.addobject(p)中出现此错误,我在代码中不使用任何SingleFirst来返回此异常。

有人帮助我 - 我可以使用哪个代码生成器没有这些错误或如何修复这些错误?我有VS 2010。

编辑:当服务器将对象发送到客户端但客户端插入失败时,服务可以正常工作。在客户端服务引用配置中,我将集合类型更改为: System.Collection.Generic.List

0 个答案:

没有答案