0

既存のコードではtransactionEntitiesのサイズが大きくなっており、ほぼ最後のステートメントで

transactionEntities.SaveChanges(System.Data.Objects.SaveOptions.AcceptAllChangesAfterSave);

今のところ、ログに例外はありませんが、最終的なメッセージがログに記録されていないため、明らかに問題が発生しました( "Finished ....")。実はここに2つの質問

  1. 何が起こっているのかを理解する方法はありますか
  2. とにかくtransactionEntitiesが成長し続けるので、単一のステートメントを模倣するバッチで保存することはどういうわけか可能でしょうか。

コンソールアプリケーションにサービスコードを抽出すると、当面は問題が解決する可能性があります(社内で一方向サービスとしてトリガーされるため、サービス自体は実際には必要ありません)が、既存のサービスの問題は解決されません。

4

1 に答える 1

0

質問1の場合-WCFサービスで診断をオンにできます

Web(またはアプリ)構成:

1)構成要素の下の任意の場所にSystem.Diagnosticsセクションを追加します。パスは、ファイルを保存するパスに置き換えることができます。

<system.diagnostics>
    <sources>
      <source name="System.ServiceModel.MessageLogging" switchValue="Warning, ActivityTracing">
        <listeners>
          <add type="System.Diagnostics.DefaultTraceListener" name="Default">
            <filter type="" />
          </add>
          <add name="ServiceModelMessageLoggingListener">
            <filter type="" />
          </add>
        </listeners>
      </source>
      <source name="System.ServiceModel" switchValue="Warning, ActivityTracing" propagateActivity="true">
        <listeners>
          <add type="System.Diagnostics.DefaultTraceListener" name="Default">
            <filter type="" />
          </add>
          <add name="ServiceModelTraceListener">
            <filter type="" />
          </add>
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add initializeData="C:\temp\services_messages.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelMessageLoggingListener" traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack">
        <filter type="" />
      </add>
      <add initializeData="C:\temp\services_tracelog.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelTraceListener" traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack">
        <filter type="" />
      </add>
    </sharedListeners>
  </system.diagnostics>

2)system.ServiceModelの下に、次を追加します。

<diagnostics wmiProviderEnabled="false">
      <messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" />
</diagnostics>

3)C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ Bin \で、SvcTraceViewer.exeを起動します。メッセージトレース(services_messages.svclog)とサービストレースログ(services_tracelog.svclog)の両方をロードします。ツールにドロップファイルをドラッグするか、ファイルを開いてから別のファイルを追加することができます

4)問題のある赤い太字を探します。

WCF構成の編集をより快適にしたい場合は、SvcTraceViewer.exe(#3)と同じフォルダーにあるSvcConfigEditor.exeを使用できます。構成ファイルを開くだけで、診断を開始/停止および構成できるDiagnosticsフォルダーが表示されます。

于 2012-06-07T06:16:20.737 に答える