HI, 내 응용 프로그램 어셈블리에있는 모든 방법 입구와 출구를 기록 할 PostSharp를 사용하고null 참조 예외가
프로젝트. 이 어셈블리는 GAC에 강력한 버전이 지정되고 등록되어 있습니다.
그런 다음 IIS 내부의 별도 가상 디렉터리에서 호스팅되는 2 개의 웹 서비스 프로젝트에서 공유됩니다. 인터셉터의 OnEntry/OnExit 메서드가 WebServiceProject1에 의해 호출되면 제대로 작동하지만 WebServiceProject2에 의해 호출 될 때 인터셉터에 전달 된 MethodExecutionEventArgs.Method 값이 null 인 것으로 보이고 NullReferenceException이 발생합니다.
IIS를 다시 시작하고 WebServiceProject2, WebServiceProject1 순서로 웹 서비스 프로젝트를 호출 한 다음 첫 번째 호출은 다시 작동하고 다른 하나는 같은 방식으로 NullReferenceException을 발생시킵니다. 코드는 다음과 같습니다
[Serializable]
[Log(AttributeExclude = true)]
[AttributeUsage(AttributeTargets.All)]
public sealed class LogAttribute : OnMethodBoundaryAspect
{
public override void OnEntry(MethodExecutionEventArgs eventArgs)
{
IoC.Resolve<ILogger>().WriteMethodEntry(eventArgs.Method, eventArgs.GetReadOnlyArgumentArray());
}
public override void OnExit(MethodExecutionEventArgs eventArgs)
{
IoC.Resolve<ILogger>().WriteMethodExit(eventArgs.Method, eventArgs.ReturnValue);
}
}
흥미롭게도, 내가 GAC에서 어셈블리를 제거 할 경우 웹 서비스 프로젝트의 \ bin 하위 디렉토리 복사본을 실행, 그것을 잘 작동합니다. 응용 프로그램의 다른 부분이 GAC에있는 어셈블리에 의존하기 때문에이 작업을 수행하고 싶지는 않지만 다른 위치에 동일한 DLL의 다른 버전이 많이 필요하지는 않습니다.
여기에 설명 된 문제와 비슷합니다 : http://generatedbyatool.net/content/post/2009/07/27/PostSharp-Bug-or-How-To-Recycle-Your-Own-App-Pool.aspx하지만 분명히 다른 점이 있습니다.
누구나 아이디어 나 조언을 얻었습니까? 오늘 이것을 증명하기 위해 독립형 응용 프로그램을 만들려고합니다.
Stoo
간단한 예제를 첨부하여 Postsharp 포럼에서이를 제기했습니다. http://www.postsharp.org/forum/postsharp-laos/null-reference-exception-methodexecutioneventargs-method-t994.html 추적기에 추가 할 것입니다. –
Mantis - ID0000415에 문제를 추가했습니다. 당신의 도움을 주셔서 감사합니다. 내가 도울 수있는 일이 있다면 알려줘. –