2011-02-16 4 views
1

WCF 서비스를 작성 중이며 서비스 클래스를 여러 개의 부분 클래스 파일로 나눠서 모든 ServiceContract-Implementation이 자체 파일을 가져옵니다. 나는 하나의 파일을 가지고 있지만 그 안에는 예를 들어 있어야합니다. 로거와 같은 모든 부분 클래스 파일에서 사용되는 멤버입니다. 이 서비스가 어떤 식 으로든 중요하다면 IIS 7에서 호스팅됩니다.부분 클래스의 공유 멤버에 액세스

부분 클래스 파일 1

<ServiceBehavior(NameSpace:= WCFHelper.SERVICENAMESPACE, AddressFilterMode:= AddressFilterMode.Any)> _ 
Partial Public Class DataService 

    #Region "Members" 
    Private Shared m_Log As log4net.ILog = log4net.LogManager.GetLogger(GetType(DataService)) 
    #End Region 

End Class 

부분 클래스 파일이 (간단한 예제를 계속 냈다 불필요한 코드)

Partial Public Class DataService 
    Implements IContractAssets 

    <SomeCustomAttribute()> _ 
    Public Function GetData(ByVal ID As Int64) As SomeCustomClass Implements IContractAssets.GetData 

     Try 
      Return SomeFunction(ID) 
     Catch ex As Exception 
      m_Log.Error("SomeError.", ex) 
      ThrowFault() 
     End Try 
    End Function 
End Class 

코드는 잘 컴파일하지만 런타임에 내가 도착 BC30451: The name m_Log is not declared 오류 (정확한 단어를 모르는 경우 독일어 메시지가 표시됩니다.)). 나는 그것이 m_Log 또는 의존하는 어셈블리의 타입과 관련이 있다고 생각하지 않는다. 왜냐하면 나는 이것을 String으로 시도 할 때 같은 에러가 발생하기 때문이다.

내가 뭘 잘못하고 있니? 이 작품을 어떻게 만들 수 있습니까?

편집 : 간단한 콘솔 응용 프로그램에서 아무 문제없이 같은 것을 시도하고있었습니다. :(

+0

대부분의 부분은 예상하지 못한 순서로 구성됩니다. 이것은 부분적인 것을 사용하는 이상한 방법입니다. 대신에 본질 또는 합성을 사용하는 방법을 생각해보십시오. –

+0

부분 클래스를 사용하는 이유는 로거 때문이 아닙니다. 내 serviceclass를 명확하게 배치하기를 원하기 때문입니다. 문제는 "하나의 클래스"에 대해 여러 로거를 정의하고 싶지 않다는 것입니다. –

+0

두 부분 클래스가 모두 동일한 네임 스페이스에 있는지 확인하십시오. 때때로 C#에서 이와 같은 작업을 수행하고 문제없이 작동합니다 ... –

답변

2

마지막으로이 오류의 원인을 알아 냈어.

불행하게도 나는 App_Code 디렉토리에 두 번째 부분 클래스 파일을 넣어 좋은 생각 일 것이다라고 생각했다. 음, 아니에요! :) 내가 이동 한 후 루트 디렉토리의 모든 파일이 정상적으로 작동했습니다.

다른 클래스에 부분 클래스 파일을 두는 것은 다른 하위 디렉토리와 잘 작동하기 때문에 문제가되지 않는 것 같습니다. 파일 중 하나가 App_Code 디렉토리 (또는 다른 ASP.NET 폴더에있을 경우에만 작동하지 않습니다. 시도하지 않았습니다).

관련 문제