2016-10-05 2 views
0

WCF 서비스 집합을 제공하는 서비스 계층과이를 사용하는 WPF 클라이언트가 포함 된 VS2015 솔루션이 있습니다. Log4net을 구성하고 서비스 계층에서 올바르게 작동합니다.Log4net을 구성하려고 시도 할 때 TypeInitializationException이 발생했습니다.

이제 log4net을 클라이언트에서 사용하려고하므로 log4net NuGet 패키지를 추가하고 서비스 계층의 구성 파일에서 해당 노드에 대한 app.config 파일에 노드를 복사했습니다. 고객. 전체 파일은

<?xml version="1.0" 
     encoding="utf-8"?> 

<configuration> 
    <startup> 
    <supportedRuntime version="v4.0" 
         sku=".NETFramework,Version=v4.5.2" /> 
    </startup> 

    <log4net> 
    <appender name="RollingFileAppender" 
       type="log4net.Appender.RollingFileAppender"> 
     <param name="File" 
      value="PhysioDiary.log" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="2" /> 
     <maximumFileSize value="1MB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-7level %logger - %message%newline%exception" /> 
     </layout> 
    </appender> 
    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="RollingFileAppender" /> 
    </root> 
    </log4net> 

    <system.serviceModel> 
    <behaviors> 
     <endpointBehaviors> 
     <behavior name="LargeMessageBehavior"> 
      <dataContractSerializer maxItemsInObjectGraph="2147483647" /> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 

    <bindings> 
     <customBinding> 
     <binding name="CustomBindingDefault" 
       closeTimeout="00:59:00" 
       openTimeout="00:59:00" 
       receiveTimeout="00:59:00" 
       sendTimeout="00:59:00"> 
      <binaryMessageEncoding> 
      <readerQuotas maxDepth="6400" 
          maxStringContentLength="100000000" 
          maxArrayLength="2147483647" /> 
      </binaryMessageEncoding> 
      <httpTransport maxBufferPoolSize="2147483647" 
         maxReceivedMessageSize="2147483647" 
         bypassProxyOnLocal="true" 
         keepAliveEnabled="false" 
         maxBufferSize="2147483647"> 
      <extendedProtectionPolicy policyEnforcement="Never" /> 
      </httpTransport> 
     </binding> 
     </customBinding> 
    </bindings> 

    <client> 
     <endpoint address="http://localhost:5448/AppointmentsService.svc" 
       behaviorConfiguration="LargeMessageBehavior" 
       binding="customBinding" 
       bindingConfiguration="CustomBindingDefault" 
       contract="AppointmentsServiceReference.AppointmentsService" 
       name="CustomBinding_AppointmentsService" /> 
     <!-- Other WCF services here, snipped for clarity --> 
    </client> 
    </system.serviceModel> 
</configuration> 

, 나는 예외가 비록 지금 클라이언트를 실행하려고하면, 어디 log4net을 사용하기 전에 ... 유형의

처리되지 않은 예외 '... 다음과 같습니다 'System.Windows.Application 예외가 발생했습니다 : System.TypeInitializationException' 의 형식 이니셜 는 PresentationFramework.dll

에 추가 정보를 발생 '.

... 클라이언트가 시작되지 않습니다. 어떤 코드에서도 깨지지 않으므로 스택 추적을 볼 수 없으며 내부 예외가 있는지도 확인할 수 없습니다.

노드의 내용을 주석 처리하지만 빈 노드는 그대로두면 예외가 발생하므로 문제가되는 노드의 내용이나 RollingFileAppender가 아닌 것 같습니다.

참조를 확인했으며 두 프로젝트 모두 log4net v2.0.5를 참조했으며 다른 log4net 참조는 없습니다. 두 프로젝트 모두 Ninject를 사용합니다. 비록 어느 프로젝트에 log4net을 주입하지 않아도 관련이 있는지는 잘 모르겠지만 (다음 단계입니다).

내 설정 파일에 appSettings 및 configSections이 없으므로 this SO question에보고 된 문제가 아닙니다. 또한 시작 노드는 항상 파일의 첫 번째 노드였으며 이로 인해 문제가 발생하지 않았습니다. 나는 그것을 끝까지 옮기려고했지만 도움이되지 못했습니다.

누구나 내가 WPF 클라이언트에 log4net을 추가하려고 할 때 충돌하는 이유는 무엇입니까?

답변

2

나는 그것을 구성 섹션 형식 등록이 필요하다고 생각 - 같은 : <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> </configSections>

+0

흠, 일,하지만 서비스 구성 파일에서 해당이 없습니다. 나는 그것이 왜 여기에서 작동하는지 이해할 수 없다. 그러나 이제는 다른 문제가 있으며 로그 파일이 쓰여지고 있지 않습니다. http://stackoverflow.com/a/1343913/706346에서 코드를 사용하면 Appender 컬렉션이 비어있는 것으로 표시됩니다. 내가 말했듯이, 노드를 서비스 프로젝트에서 직접 복사하여 올바르게 작동시킵니다. 감사합니다 –

+0

흠 파트 II. 나는이 게시 http://stackoverflow.com/a/8138647/706346 Assembly.cs에 선을 추가하는 것이 좋았던 것을 발견했다. 다시 말하지만,이 없이는 서비스 계층에서 로깅이 어떻게 작동하는지 이해할 수 없습니다. –

+0

log4net에 익숙하지 않습니다. 지금까지 서비스가 당신이 없이는 아무것도 추가 할 필요가 없기 때문에 그것은 .net 이미 다양한 섹션을 정의하고 있기 때문에 wcf 그렇게 할 것입니다. 로깅이 어떻게 작동하는지, log4net 로깅 또는 다른 어떤 것에 대한 참조는 실제로 있을지 모릅니다. – Andrew