0

Silverlight MVVM 템플릿을 만들고 WCF 서비스 반환 및 개체 개체로 인해 막혔습니다. 서버 측 테이블의 부부와 함께 작은 테스트 데이터베이스 작성 Silverlight에서 WCF 서비스 및 Entity Framework 504 문제가 발생했습니다.

  • 에 엔티티 프레임 워크를 사용

    1. :

      는 여기에 내가 무슨 짓을했는지.

    2. 서버 측에서 WCF 서비스를 만들었습니다.
    3. 그런 다음 정수를 반환하는 작은 테스트 메서드를 만들었습니다.
    4. 클라이언트 쪽에서 서비스 참조를 추가하고 완성 된 메서드에서 정수 결과를 성공적으로 받았습니다.
    5. 그런 다음 내 테스트 서비스 메서드를 변경하여 "Person"개체 (Entity Framework에서 엔터티 임)
    6. 이 (가) 내 서비스 참조를 업데이트 한 다음 작동하지 않습니다!
    7. 나는 어떤 기본 CLR 형식으로 반환 형식 및 작동 다시

    내가 피들러를 확인하고 내 서비스 응답에서 다음 504 오류 :

    HTTP/1.1 504 피들러 - 수신 실패 내용 유형 : text/html; charset = UTF-8 연결 : 닫음 타임 스탬프 : 08 : 56 : 23.783

    [Fiddler] ReadResponse() failed : 서버가이 요청에 대한 응답을 반환하지 않았습니다.

    이를 알아 내려고 후, 나는 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 Framework의 designer.cs 파일을 보면 엔터티에 Serializable 특성이 표시됩니다. 확실히 이것은 WCF 서비스를 통해 이것을 전달할 수 있다는 것을 의미합니까 ??? 이 오류를 이해할 수 없습니다. 불행히도 ...

    WCF 서비스에서 Entity Framework를 사용할 수 있습니까?

    도움을 주시면 감사하겠습니다.

  • +0

    누구? 나는 많은 사람들이 이렇게 해왔다고 확신한다 !! –

    답변

    1

    동일한 문제가있어서 DataContractSerializer에 ef 개체의 탐색 속성에 문제가 있음을 알 수 있습니다.

    내 테스트 프로젝트에서 northwind 데이터베이스를 사용하고 있습니다. 권장되는 DbContext를 사용하여 CodeFirst 접근 방식을 테스트하려고했습니다.

    제공되는 탐색 속성은 가상이며 요청시로드되지만 탐색 속성에서 엔터티의 첫 번째 수준 만 반환됩니다.

    엔터티 개체를 serialize 할 때 엔터티 개체가 더 이상 DbContext에 바인딩되지 않고 탐색 속성의 serialization이 실패하여 DataContractSerializer가 실패했습니다.

    내 wcf 서비스를 통해 NW Employee 개체를 소비하려고 할 때 발생합니다.

    내 계약은 데이터 계약 속성을 사용하여 새 개체의 모든 데이터를 복사하는 것입니다.

    서비스 호출 :

    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를 사용했다. –