Ошибка WCF "Последовательность не содержит элементов" - "Коллекция не соответствует заданному размеру"

Я новичок в WCF. Я начинаю создавать проект WCF, который сохраняет информацию о людях в базе данных EF.

У меня было много ошибок, и я исправлял их при поиске на разных сайтах, но недавно меня остановили некоторые ошибки, и я не могу их исправить.

Мой проект n-уровневый с моделью данных Entity Framework. Существует 4 слоя для сервера.

DAL (содержит EF dataModel)-> BLL (библиотека классов для вставки / обновления / удаления функций)-> уровень службы (библиотека классов wcf)-> уровень хоста (служба windows)

Я размещаю свой сервис в службе Windows. Привязка службы является nettcpbinding. Я настраиваю службу, так что нет проблем здесь.

У меня есть проект с именем "Common"(библиотека классов), к которому все 4 проекта имеют доступ к нему, и, как вы знаете, я создаю генератор кода и вставляю сгенерированный класс в общий.(Отдельная модель класса с DAL).

Теперь клиент имеет только (Host Layer) service 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);
}

Мои проблемы:

Обе ошибки происходят на стороне клиента после того, как я вставляю объект people.

Когда я использую Poco Code Generator для My EF, я получаю эту ошибку:

В коллекции не было фиксированного размера

Эта ошибка возникает в определении классов Poco.

Когда я использую генератор кода самообследования для моего EF, я получаю эту ошибку:

Последовательность не содержит элементов

Я думаю, что эта ошибка возникает в contex.addobject(p) и я не использую Single Или же First в моем коде, которые возвращают это исключение.

Кто-то мне поможет - какой генератор кода я могу использовать, у которого нет этих ошибок, или как я могу исправить эти ошибки? У меня VS 2010.

Редактировать: служба работает, когда сервер отправляет объекты клиенту, но при вставке клиентом происходит сбой. В конфиге справочной службы клиентов я изменил тип коллекции на: System.Collection.Generic.List

0 ответов

Другие вопросы по тегам