2011-10-04 3 views
2

일반 웹 사용자 목록 List<User> 개체를 웹 서비스에서 내 웹 응용 프로그램으로 가져오고 싶습니다. 아마 이것은 일반적인 문제입니다. 나는 많이 찾았지만 각 링크마다 다른 치료법을 가지고있다. 그래서 마침내 나는 여기에 균열을 묻기로 결정한다. 어쨌든WCF 서비스에서 데이터 읽기 읽기

나는 호스팅 된 wcf 웹 서비스에서 데이터를 가져 오기 위해 콘솔 응용 프로그램을 사용하고있다. Entity 프레임 워크 4.1을 사용하는 WCF 웹 서비스로서. 모델 클래스의 객체를 사용하고 있습니다. 내 웹 응용 프로그램에 서비스 참조를 추가하려고하면 일반적으로 웹 응용 프로그램에 프록시가 생성됩니다. 나는 데이터를 게시 할 수 있다는 뜻은 내가 사용자를 만들 수 있습니다. 하지만 다음과 같은 예외를 받고, 목록을 반환 ... getusers 동안 :

예외 : http://myserver/AdminService/MyAdminService.svc에 HTTP 응답을받는 동안
오류가 발생했습니다. 이는 HTTP 프로토콜을 사용하지 않는 서비스 엔드 포인트 바인딩 때문일 수 있습니다. 이것은 일 수도 있습니다. HTTP 요청 컨텍스트가 서버 에 의해 중단 되었기 때문일 수 있습니다 (서비스가 종료되었을 가능성이 있습니다). 자세한 내용은 서버 로그를 참조하십시오 ( ).

내부 예외이다 :
은 기본 연결이 닫혔다 예기치 않은 에러가 가

내측 - 내측 예외가 발생한 경우 : 전송 접속으로부터 데이터를 판독 할 수 없습니다 기존 연결 강제이었다 원격 호스트 에 의해 종료되었습니다. 메시지

: 기존의 연결이 강제로 원격 호스트
오류 코드에 의해 폐쇄되었다 : 10054

경우 이벤트 로그의 말 :
이 메시지가 기록되지 않았습니다.
예외 : System.ServiceModel.CommunicationException : http://tempuri.org/:getUsersResult 매개 변수를 serialize 할 때 오류가 발생했습니다. 의 InnerException 메시지가 했다 '유형 'System.Data.Entity.DynamicProxies.User_00DEC686D7E21DB0D84B595F647A03FFB4943938F76E8C3DBBE0F77F8BC29A1D ' 데이터 계약 이름 'User_00DEC686D7E21DB0D84B595F647A03FFB4943938F76E8C3DBBE0F77F8BC29A1D : HTTP : //schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies ' 이 필요하지 않습니다. DataContractResolver를 사용하거나 알려진 유형 목록에 정적으로 알지 못하는 유형을 추가하는 것을 고려하십시오. 예를 들어 KnownTypeAttribute 특성을 사용하거나이를 DataContractSerializer에 전달 된 알려진 유형의 목록에 추가합니다. ' 자세한 내용은 InnerException을 참조하십시오. ---> System.Runtime.Serialization.SerializationException : 유형 'System.Data.Entity.DynamicProxies.User_00DEC686D7E21DB0D84B595F647A03FFB4943938F76E8C3DBBE0F77F8BC29A1D' 데이터 계약 이름 'User_00DEC686D7E21DB0D84B595F647A03FFB4943938F76E8C3DBBE0F77F8BC29A1D : HTTP : //schemas.datacontract.org/2004/07/System .Data.Entity.DynamicProxies ' 이 필요하지 않습니다. DataContractResolver를 사용하거나 알려진 유형 목록에 정적으로 알려지지 않은 형식 인 을 추가하십시오. 예를 들어 은 KnownTypeAttribute 특성을 사용하거나 DataContractSerializer에 전달 된 알려진 형식 목록의 목록에 추가하여 추가 할 수 있습니다. at System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeAndVerifyType (DataContract dataContract, XmlWriterDelegator XmlWriter를, 개체 OBJ, 부울 verifyKnownType, RuntimeTypeHandle declaredTypeHandle, 유형 , 선언) System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithXsiType (XmlWriterDelegator XmlWriter를, 개체 OBJ, RuntimeTypeHandle objectTypeHandle, 유형 에서 objectType의, 에서 INT32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle, 유형, 선언) System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerialize (XmlWriterDelegator XmlWriter를, 개체 OBJ, 부울 isDeclaredType, 부울 writeXsiType, 012,351,641 WriteArrayOfUserToXml에서 System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerializeReference (XmlWriterDelegator XmlWriter를 오브젝트 OBJ 부울 isDeclaredType 부울 writeXsiType, INT32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle) 에서INT32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle) (XmlWriterDelegator, 개체 XmlObjectSerializerWriteContext System.Runtime.Serialization.DataContractSerializ에서 System.Runtime.Serialization.CollectionDataContract.WriteXmlValue (XmlWriterDelegator XmlWriter를, 개체 OBJ, XmlObjectSerializerWriteContext 컨텍스트) 에서, CollectionDataContract) System.Runtime.Serialization.XmlObjectSerializer.WriteObjectHandleExceptions에서 System.Runtime.Serialization.DataContractSerializer.InternalWriteObject (XmlWriterDelegator 작가, 개체 그래프, DataContractResolver dataContractResolver) 에서 er.InternalWriteObjectContent (XmlWriterDelegator 작가, 개체 그래프, DataContractResolver dataContractResolver) ( System.ServiceModel.Dispatcher.DataContractSerializerOperation에서 System.Runtime.Serialization.XmlObjectSerializer.WriteObject (XmlDictionaryWriter 작가, 개체 그래프) 에서 XmlWriterDelegator 작가, 개체 그래프, DataContractResolver dataContractResolver) Formatter.SerializeParameterPart (XmlDictionaryWriter 작가, PartInfo 부분, 개체 그래프) System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.SerializeParameterPart에서 --- 내부 예외 스택 추적의 끝 --- (XmlDictionaryWriter 작가, PartInfo 부분, 개체 그래프) System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.SerializeBody (XmlDictionaryWriter 작가, MessageVersion 버전 문자열 액션, MessageDescription,536,913에서 System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.SerializeParameter (XmlDictionaryWriter 작가, PartInfo 부분, 개체 그래프) 에서 63,210 messageDescription, 개체에 ReturnValue, System.ServiceModel.Dispatcher.OperationFormatter.OperationFormatterMessage.OperationFormatterBodyWriter.OnWriteBodyContents (XmlDictionaryWriter 라이터) System.ServiceModel.Channels.BodyWriter.WriteBodyContents에서 (XmlDictionaryWriter에서 [] 파라미터 부울 isRequest) 개체 작가) 시스템에서 System.ServiceModel.Diagnostics.MessageLogTraceRecord.WriteTo (XmlWriter를 작가) 에서 System.ServiceModel.Channels.Message.ToString (XmlDictionaryWriter 작가) 에서 .ServiceModel.Diagnostics.MessageLogger.LogInternal System.ServiceModel.Diagnostics.MessageLogger.LogMessage에서 System.ServiceModel.Diagnostics.MessageLogger.LogMessageImpl (메시지 & 메시지 XmlReader를 리더 MessageLoggingSource 소스) (메시지에서 (MessageLogTraceRecord 레코드) & 메시지, XmlReader를 리더, MessageLoggingSource 원) 프로세스 이름 : W3WP 프로세스 ID는 : 5928

이 문제가 될해야합니까. 저와 팀이 3 일 동안 이것을 찾고 있습니다. 하지만 불행하게도 ... 내가 모든 :) ... 아마 당신이 우리에게 줄 수 올바른 방향을 회상 할 수 ...

내가 거즈의 많은 직렬화 속성, 엔드 포인트 수정을 추가하고자 시도 ... 지금까지 극복하지

답변

7

EF 클래스는 기본적으로 런타임에 지연로드 및 동적 변경 추적을 지원하기 위해 프록시되기 때문입니다. 따라서 User 클래스를 직렬화하지는 않지만 런타임에 User에서 파생 된 클래스를 직렬화하십시오. WCF는 그 점을 좋아하지 않습니다. 컨텍스트에서 프록시 만들기를 해제하십시오.

context.Configuration.ProxyCreationEnabled = false; 
+1

개념을 공유하기를 고맙습니다 ...이 개념은 정말 저에게 새로운 것입니다.이 줄을 어디에 써야합니까? –

+0

감사합니다 ... 감사합니다 ... 지난 3 일 이래로 머리를 긁적니다. 작동합니다. –

+0

저는 어떻게되는지 모르지만, 지금 당장이 도움이되었습니다, 감사합니다! – Michael