우리는 System.Diagnostics.StackTrace 및 StackFrame을 사용하여 logger.writeLine()이 호출 된 파일 이름, 줄 번호, 클래스 및 메서드에 대한 정보를 얻는 C# 로깅 클래스를 사용합니다. 로그 메시지에 삽입됩니다.StackTrace 및 WCF 클래스의 기이함
우리는 콘솔 응용 프로그램, Windows 서비스, .aspx 웹 응용 프로그램 및 .asmx 웹 서비스에서이 문제를 문제없이 사용했습니다.
저는 현재 IIS가 호스팅하는 WCF 서비스에서 일하고 있습니다. 나는 이상한 것을보고 있습니다.
나는 인 ServiceBehavior 클래스의 생성자에 logger.writeLine()를 넣으면하고이 코드에 들어간 :
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace(true);
System.Diagnostics.StackFrame sf = st.GetFrame(2);
첫 번째 줄은 null을 반환 것으로 보인다. 또는 적어도 두 번째 NullReferenceException throw합니다.
이제 이상한 점이 있습니다. 이것은 IIS에서 webservice를 호스팅 할 때만 발생합니다. Visual Studio의 dev 서버에서 실행할 때 문제가 없습니다.
심지어 IIS에서도 생성자에만 문제가 있습니다. logger.writeLine()에 대한 호출은 OperatioonContract 메소드와 호출 된 메소드에서 올바르게 작동합니다. 그것은 단지 생성자에서, 그리고 IIS에 의해 호스팅 될 때만 문제가 있다는 것입니다.
logger.writeLine()에서 try/catch를 래핑하면 예외가 발생하면 로그 파일에 회선 정보가 포함되지 않으므로 모든 것이 정상적으로 작동합니다. 또는 생성자에서 로깅을 사용할 수 없습니다. 생성자에서 수행 한 유일한 작업은 생성자가 호출되었음을 기록하는 것입니다. 그래서 저는 실제로 문제가 없습니다.
그러나 나는 무슨 일이 일어나고 있는지 궁금하고 .NET의 이상한 구석을 발견했습니다. 이런 기이 한 일들을 처리하고 그들을 다루는 것으로 보이는 해결책을 찾았을 때, 아직 절반은 다른 문제가 있습니다.
그럼 왜 이런 일이 일어날 지에 대한 설명이있는 사람이 있습니까?
_what_?의 생성자는? 응용 프로그램 개체? –
ServiceBehavior 클래스의 생성자입니다. –