2012-06-14 2 views
0

우리는 .NET 4, WPF, WCF, EF 4, SQL 2008 응용 프로그램을 가지고 있습니다. 우리의 EF 모델 중 하나는 매우 관계 성이 있으며, 필자가 기술 할 수있는 경우에는 아마도 사이클을 포함하고있을 것입니다. 이 STE EF 모델의 모든 갑작스런 데이터가 WPF 클라이언트에 나타나지 않는 현장의 사례 문제를 해결하도록 요청 받았습니다. 더 자세히 살펴보면 STE EF 객체 그래프를 검색 (직렬화)하려고 할 때 IIS W3WP 프로세스가 충돌한다는 것을 알았습니다. 디버그 진단을 사용하여 충돌을 캡처했습니다.StackOverflowException STE EF 개체 그래프 serialize

생성 된 오류 보고서를 살펴보면 스택 오버플로 예외 (적절한 방법)라는 것을 발견했습니다. 충돌 보고서의 스택 트레이스는 다소 크지 만 스택의 상단과 같은 :

System.Xml.XmlBaseWriter.StartElement(System.String ByRef, System.String, System.String, System.Xml.XmlDictionaryString) 
System.Xml.XmlBaseWriter.WriteStartElement(System.String, System.Xml.XmlDictionaryString, System.Xml.XmlDictionaryString) 
System.Runtime.Serialization.XmlWriterDelegator.WriteStartElement(System.String, System.Xml.XmlDictionaryString, System.Xml.XmlDictionaryString) 
DynamicClass.WriteXXXDataToXml(System.Runtime.Serialization.XmlWriterDelegator, System.Object, System.Runtime.Serialization.XmlObjectSerializerWriteContext, System.Runtime.Serialization.ClassDataContract) 
System.Runtime.Serialization.ClassDataContract.WriteXmlValue(System.Runtime.Serialization.XmlWriterDelegator, System.Object, System.Runtime.Serialization.XmlObjectSerializerWriteContext) 
System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithoutXsiType(System.Runtime.Serialization.DataContract, System.Runtime.Serialization.XmlWriterDelegator, System.Object, System.RuntimeTypeHandle) 
System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerialize(System.Runtime.Serialization.XmlWriterDelegator, System.Object, Boolean, Boolean, Int32, System.RuntimeTypeHandle) 
System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerializeReference(System.Runtime.Serialization.XmlWriterDelegator, System.Object, Boolean, Boolean, Int32, System.RuntimeTypeHandle) 

무엇 매우 이상한 만드는 것은 WCF 서비스 Visual Studio에서 호스팅 할 때 내가 dev에 환경에서 실행한다는 것입니다 , 직렬화 완벽하게 작동하고 클라이언트에서 데이터를 가져옵니다.

IIS 설정으로 해결할 수 있습니까? Visual Studio의 개발자 IIS에서는 작동하지만 프로덕션 IIS에서는 작동하지 않는 이유는 무엇입니까?

이 문제의 원인 또는 왜 시리얼 라이저가 barfing인지 알 수 없습니까?

STE EF4가 적용된 다른 WCF 직렬화 방법을 사용해 볼까요?

모든 의견을 환영합니다.

감사합니다.

답변

1

(기본값) IIS는 관리되는 스레드의 스택 크기를 256KB로 제한합니다. dev 웹 서버에 대해서는 모르지만 관리되는 스레드의 기본 스택 크기는 1MB입니다. 또한 64 비트 시스템 스택에서 실행중인 경우 일반적으로 프레임은 32 비트 시스템의 스택 프레임보다 큽니다. 그래서, 만약 당신의 dev에 상자가 32 비트 당신이 생산에서 볼 수 없습니다 볼 수 있습니다. 나는 이것을 여기에 조금 썼다. http://blogs.msdn.com/b/xmlteam/archive/2011/09/26/effective-xml-part-5-something-went-really-wrong-outofmemoryexception-and-stackoverflowexception-thrown-when-using-xslcompiledtransform.aspx. 약간 다른 컨텍스트이지만 IIS, 스택 크기 및 프레임 크기에 대한 토론은 여전히 ​​적용됩니다.

+0

굉장! 의견을 보내 주셔서 감사합니다. 나는 그 라인을 따라 뭔가를 보장합니다. IIS에서 스택 크기를 업데이트하는 방법에 대한 아이디어가 있습니까? 이 기사에서는 editbin.exe를 사용하여 http://blogs.msdn.com/b/tom/archive/2008/03/31/stack-sizes-in-iis-affects-asp-net.aspx에서 수행하는 방법에 대해 설명합니다. 그러나 우리는 생산 환경에서이 exe를 가지고 있지 않습니다. 내 컴퓨터에서 w3wp.exe 응용 프로그램을 업데이트 할 수 있지만 TrustedInstaller 권한이 없으면 고객 컴퓨터에서 해당 파일을 바꿀 수는 없습니다. 어떤 아이디어? –