0

Я создаю шаблон MVVM Silverlight и получаю зависание с возвратом службы WCF и объектом Entity.Silverlight enabled WCF Service and Entity Framework 504 issue

Вот что я сделал:

  1. Использование Entity Framework на стороне сервера
  2. создал небольшой тест базы данных с несколькими таблицами.
  3. Создал службу WCF на стороне сервера
  4. Затем я создал небольшой метод тестирования, возвращающий целое число.
  5. На моей стороне клиента, я добавил ссылку на службу, и я получаю целочисленный результат в моем завершенном методе успешно
  6. затем изменил мой метод испытания службы, чтобы вернуть «лицо» объект (который является юридическим лицом с Entity Framework)
  7. обновил мою справочную службу, а затем она не работает!
  8. я тогда типа возврата к любому основному типу CLR и он снова работает

Я проверил Фидлер и я получаю следующее ошибки в моем ответ службы:

HTTP/1.1 504 Скрипача - Ошибка приема Content-Type: text/html; кодировка = UTF-8 Подключение: закрыть Отметка: 08: 56: 23,783

[Скрипач] ReadResponse() не удалось: Сервер не возвращает ответ на этот запрос.

После попытки выяснить это, я наткнулся на WCF Trace Logging и нашел эту ошибку:

There was an error while trying to serialize parameter :BasicResult. The InnerException message was 'Type 'MVVMProject.Web.DataSource.Person' with data contract name 'Person:http://schemas.datacontract.org/2004/07/MVVMProject.Web.DataSource' is not expected. Consider using a DataContractResolver or add any types not known statically to the list of known types - for example, by using the KnownTypeAttribute attribute or by adding them to the list of known types passed to DataContractSerializer.'. Please see InnerException for more details. 

Я не понимаю, почему это так трудно? Должен ли я установить какое-то свойство на моем Entity, чтобы сделать его сериализуемым? Если я посмотрю на файл designer.cs Entity Framework, я вижу атрибут Serializable в Entity. Наверняка это означает, что я могу передать это через службу WCF ??? Я не понимаю эту ошибку, к сожалению ...

Возможно ли использовать Entity Framework с сервисом WCF?

Любая помощь была бы принята с благодарностью.

+0

Кто-нибудь? Я уверен, что многие из вас сделали что-то подобное !!?! –

ответ

1

У меня была такая же проблема, это швы, что у DataContractSerializer возникла проблема с навигационными свойствами объектов ef.

В моем тестовом проекте я использую базу данных Northwind. Я хотел протестировать подход CodeFirst с рекомендованным DbContext.

Предоставляемые свойства навигации являются виртуальными, и они загружаются по требованию, но заполняется только возвращаемый ef с первым уровнем объекта в свойствах навигации.

При сериализации объекта сущности DataContractSerializer завершился сбой, поскольку объект сущности больше не привязан к DbContext и не удалось выполнить сериализацию свойств навигации.

Это случается, когда я пытаюсь использовать объект работника NW над моей службой wcf.

My soultion - копировать все данные в новый объект с атрибутами контракта данных!

вызов службы:

public IEnumerable<EmployeeWcf> GetAll() 
    { 
     IEnumerable<EmployeeWcf> result = null; 

     result = from e in context.Employees.OrderBy(e => e.LastName) 
         select new EmployeeWcf 
         { 
          EmployeeId = e.EmployeeID, 
          Firstname = e.FirstName, 
          Lastname = e.LastName 
         }; 

     return result; 
    } 

класс:

[DataContract] 
public class EmployeeWcf 
{ 
    [DataMember] 
    public int EmployeeId { get; set; } 
    [DataMember] 
    public string Firstname { get; set; } 
    [DataMember] 
    public string Lastname { get; set; } 
} 

Эта работа, но мне кажется, что это не идеальное решение.

Надеюсь, это вам поможет.

+0

Я предполагаю, что это сделает трюк. Я, тем не менее, потрогал то, как я это делал, и использовал RIA, который хорошо сериализует сущности. –