2016-10-05 18 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.TypeInitializationException ' がPresentationFramework.dllで発生しました

追加情報: の型の初期化子' System.Windows.Application 'が例外をスローしました。

...クライアントが起動しません。どのコードでも壊れませんので、スタックトレースを見ることができず、内部例外があるかどうかも確認できません。

ノードの内容をコメントにして空のノードを残しても、まだ例外が発生するため、ノードの内容や問題のRollingFileAppenderではないようです。

私は参照をチェックしましたが、両方のプロジェクトではlog4net v2.0.5が参照されており、他のlog4net参照はありません。どちらのプロジェクトでもNinjectを使用していますが、どちらのプロジェクトにもlog4netを注入していないので、それが適切かどうかはわかりませんが(それは次のステップです)。

this SO questionで報告されている問題はありません。設定ファイルにはappSettingsもconfigSectionsもありません。また、起動ノードは常にファイル内の最初のノードであり、これは問題を引き起こしたことはありません。私はそれを最後まで動かしてみましたが、助けにはなりませんでした。

WPFクライアントにlog4netを追加しようとするとクラッシュする理由は何ですか?

答えて

2

私はそれは設定セクションを持つタイプの登録に必要だと思います - のようなもの: <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> </configSections>

+0

うーん、働いていたが、私は、サービス設定ファイルにそれを持っていません。私はなぜそれがここではなく動作するのか理解できません。しかし、今は別の問題があり、それはログファイルが書き込まれていないということです。 http://stackoverflow.com/a/1343913/706346のコードを使用すると、Appendersコレクションが空であると表示されます。私が言ったように、私はノードをサービスプロジェクトから直接コピーして正常に動作します。ありがとう –

+0

HmmパートII。私はこの記事を見つけましたhttp://stackoverflow.com/a/8138647/706346 Assembly.csにラインを追加することを提案しました。これはうまく動作します。繰り返しますが、これがなくてもサービスレイヤでどのようにロギングが機能するのか分かりません。 –

+0

log4netにはそれほど詳しいことはありません。あなたが何も追加する必要がないサービスは、.netが既にさまざまなセクションを定義しており、wcfのためにそうしているからです。ロギングがどのように機能しているのかよくわからないのですが、実際にはlog4netのロギングやその他の情報が参考になります。 – Andrew

関連する問題