예외의 내부 예외를 catch하고 SQL Database 테이블에 기록하려고합니다. 내가 잡은 코드 및 문제없이 SQL 테이블에 예외를 기록하지만, 예외에 대한 메시지가 "세부 사항에 대한 내부 예외를 참조하십시오."라고해도 내부 예외 레코드를 얻지는 못합니다. 누군가 내면의 예외를 잡는 한 정확한 방향으로 나를 가리킬 수 있습니까? 다음은 예외를 catch하는 코드이지만 내부 예외에 대해서는 작동하지 않습니다.WCF 내부 예외를 catch하는 문제가 발생했습니다.
try
{
context.CalculateFreight(xmldoc);
}
catch (Exception ex)
{
if (ex.Message.ToString().Length > 2048)
{
ApplicationError myError = new ApplicationError();
myError.ErrorNumber = 1;
myError.ErrorSeverity = 1;
myError.ErrorState = 1;
myError.ErrorLine = 29;
myError.ErrorProcedure = "Web Service - ProcessShipping()";
myError.ErrorMessage = ex.Message.ToString().Substring(0, 2047);
myError.ErrorDateTime = DateTime.Now;
context.ApplicationErrors.AddObject(myError);
context.SaveChanges();
}
else
{
ApplicationError myError = new ApplicationError();
myError.ErrorNumber = 1;
myError.ErrorSeverity = 1;
myError.ErrorState = 1;
myError.ErrorLine = 29;
myError.ErrorProcedure = "Web Service - ProcessShipping()";
myError.ErrorMessage = ex.Message.ToString();
myError.ErrorDateTime = DateTime.Now;
context.ApplicationErrors.AddObject(myError);
context.SaveChanges();
}
if (ex.InnerException.Message.ToString().Length > 0)
{
if (ex.InnerException.Message.ToString().Length > 2048)
{
ApplicationError myInnerException = new ApplicationError();
myInnerException.ErrorNumber = 1;
myInnerException.ErrorSeverity = 1;
myInnerException.ErrorState = 1;
myInnerException.ErrorLine = 29;
myInnerException.ErrorProcedure = "Web Service - INNER EXCEPTION";
myInnerException.ErrorMessage = ex.InnerException.Message.ToString().Substring(0, 2047);
myInnerException.ErrorDateTime = DateTime.Now;
context.ApplicationErrors.AddObject(myInnerException);
context.SaveChanges();
}
else
{
ApplicationError myInnerException = new ApplicationError();
myInnerException.ErrorNumber = 1;
myInnerException.ErrorSeverity = 1;
myInnerException.ErrorState = 1;
myInnerException.ErrorLine = 29;
myInnerException.ErrorProcedure = "Web Service - INNER EXCEPTION";
myInnerException.ErrorMessage = ex.InnerException.Message.ToString();
myInnerException.ErrorDateTime = DateTime.Now;
context.ApplicationErrors.AddObject(myInnerException);
context.SaveChanges();
}
}
}
정말 코드를 리팩터링해야합니다. 'ApplicationError' 인스턴스를 생성, 생성, 저장하는 블록은 메소드에 쉽게 포함시킬 수 있습니다. –
이것은 무엇을 의미합니까? 'if (message.toString(). Length> 2048)'의심 스럽습니다. – sll
@ 유일한 차이점은 메시지를 2048 자로 "서브 문자열"한다는 것입니다. 따라서 리팩터링에 대한 제 제안입니다. –