2013-07-18 2 views
0

ExceptionsJSONService라는 WCF 서비스가 있습니다. 내 솔루션에 정의 된 다른 모든 서비스와 달리 어떤 이유로 든 자바 스크립트에서 클라이언트 측을 인스턴스화 할 수 없습니다.엔티티 프레임 워크 직렬화 오류로 인해 wcf 서비스가 작동하지 않습니다.

이 실패 예상 객체와

var service = new ExceptionsJSONService(); 

. 나는 왜 이런 일이 일어나고 프로젝트 전반에 걸쳐 나의 모든 정의를 확인하려고 노력하고 있었고 모든 것이 잘 보였으며 내가 정의한 다른 모든 서비스 (모든 것이 작동 함)와 일치합니다.

그런 다음 svclog 파일을 검사하고 오류를 발견했습니다. 예외의 종류 :

System.Runtime.Serialization.InvalidDataContractException, 들은 System.Runtime.Serialization 버전 4.0.0.0 = 문화 = 중성, 예외 메시지

이다 PublicKeyToken = b77a5c561934e089 :

유형 'System.Data.Entity.DbSet`1는 [CCMModel.AttachmentDoc는]' 직렬화 할 수 없습니다. DataContractAttribute 특성으로 표시하고 DataMemberAttribute 특성을 사용하여 직렬화하려는 모든 구성원을 표시하는 것이 좋습니다. 형식이 컬렉션 인 경우 을 CollectionDataContractAttribute로 표시합니다. 지원되는 다른 유형에 대해서는 Microsoft .NET Framework 설명서를 참조하십시오.

CCMModel은 네임 스페이스이고 AttachmentDoc은 내 엔터티 중 하나입니다. 이 문제는 AttachmentDoc과 관련이 없습니다. 알파벳순으로 엔티티 목록을 살펴 보겠습니다. 엔티티의 이름을 Attachments에서 RAttachments로 변경했고 AttachmentDoc으로 예외를 던졌습니다.

내 코드에서 아무 EF 엔티티도 직렬화하려고하지 않습니다. 직렬화하는 모든 클래스에는 DataContracts가 있습니다. 두 가지가 관련 있다고 생각하는 이유는 오픈 ServiceHost 'ExceptionsJSONService'가 svclog에 나타나는 바로 뒤에 예외가 발생하기 때문입니다.

누구나 전에이 문제가 발생 했습니까?

답변

0

이 문제는 ExceptionsJSONService 클래스에 정의 된 공용 함수 때문에 발생했습니다. 이 기능은 공개로되어 있지만 운영 계약으로 표시되었습니다.

함수의 매개 변수 목록에서 우리 EF DB 컨텍스트 개체가 있습니다. 운영 계약의 매개 변수 목록에 있었으므로 서비스에서 DB 컨텍스트와 연관된 모든 엔터티에 대한 데이터 계약을 검색했습니다. 이로 인해 서비스 추적 로그에만 표시되는 예외가 발생했습니다. 예외로 인해 서비스가 올바르게로드되지 못하게되어 javascript에서 서비스 클라이언트 측을 인스턴스화하려고 할 때 실패하게됩니다.

함수에서 Operation Contract 특성을 제거하면 문제가 해결되었습니다.

관련 문제