Gewusst wie: Deaktivieren / Aktivieren der WCF-Ablaufverfolgung in C # -Anwendungscode

Da ich eine Weile gebraucht habe, um das zu korrigieren, habe ich mich entschlossen, eine Lösung mit anderen zu teilen, da dies möglicherweise jemand anderem mehrere Tage lang Versuch und Irrtum erspart.

Das Problem: Ich möchte die WCF-Ablaufverfolgung in meiner C # .NET-Anwendung aktivieren / deaktivieren und den Dateinamen für die Ablaufverfolgungsausgabe auswählen können. Ich möchte nicht, dass Benutzer die .config-Datei bearbeiten. Dort ist zu viel Platz für Fehler.

Hier ist eine Lösung.

Die .config-Datei der Anwendung:

<?xml version="1.0"?>
<configuration>
  <system.diagnostics>
    <trace autoflush="true"/>
    <sources>
      <source name="System.ServiceModel" switchValue="All">
        <listeners>
          <add name="MyListener"/>
        </listeners>
      </source>
      <source name="System.ServiceModel.MessageLogging" switchValue="All">
        <listeners>
          <add name="MyListener"/>
        </listeners>
      </source>
      <source name="System.ServiceModel.Activation" switchValue="All">
        <listeners>
          <add name="MyListener"/>
        </listeners>
      </source>
      <source name="System.IdentityModel" switchValue="All">
        <listeners>
          <add name="MyListener"/>
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add name="MyListener" type="MyNamespace.MyXmlListener, MyAssembly"/>
    </sharedListeners>
  </system.diagnostics>
  <system.serviceModel>
    <diagnostics wmiProviderEnabled="true">
      <messageLogging
        logEntireMessage="true"
        logMalformedMessages="true"
        logMessagesAtServiceLevel="true"
        logMessagesAtTransportLevel="true"
        maxMessagesToLog="1000"
        maxSizeOfMessageToLog="8192"/>
    </diagnostics>
  </system.serviceModel>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
</configuration>

Mein C # -Code:

using System;
using System.IO;
using System.Diagnostics;
namespace MyNamespace
{
    public class MyXmlListener : XmlWriterTraceListener
    {
        public static String TraceOutputFilename = String.Empty;

        public static Stream MakeOutputStream()
        {
            if (String.IsNullOrWhiteSpace(TraceOutputFilename))
                return Stream.Null;

            return new FileStream(TraceOutputFilename, FileMode.Create);
        }

        public MyXmlListener ()
            : base(MakeOutputStream())
        { }
    }
}

Um die WCF-Ablaufverfolgung für eine Datei zu aktivieren, legen Sie TraceOutputFilename fest, bevor das WCF-Objekt erstellt wird:

MyXmlListener.TraceOutputFilename = "trace.svclog";

Ich habe große Vorteile von diesem Forum bekommen, ich hoffe, dieser Beitrag zahlt sich aus!

SehenVollqualifizierte Typnamen angeben zum korrekten Festlegen des "Typs" in einer .config-Datei.

Antworten auf die Frage(0)

Ihre Antwort auf die Frage