Zugriff auf XML-Dateien Logging unter Silverlight Emmulator erkennen (Teil 2)
Kommentare

Menü 2 für Experten: Logging unter Silverlight
Logging unter Silverlight ist ein schwieriges Thema. Auf der einen Seite sollte sich sowieso die hauptsächliche Geschäftslogik auf dem Server abspielen,

Menü 2 für Experten: Logging unter Silverlight

Logging unter Silverlight ist ein schwieriges Thema. Auf der einen Seite sollte sich sowieso die hauptsächliche Geschäftslogik auf dem Server abspielen, womit es bereits zahlreiche Lösungen zum Thema Logging gibt. Auf der anderen Seite muss sich auch das Handling des Clients diagnostizieren lassen. Die Herausforderung ist an dieser Stelle, dass beim Kunden vor Ort das Logging ausgewertet werden kann.

Dazu bieten die gängigen Browser bereits eine der besten Lösungen mittels „Konsole“ an. Mit der Konsole können Informationen angezeigt werden, die von der Silverlight-Anwendung mittels DOM zum Browser gesendet wurden. Beim FireFox kann die Konsole zum Beispiel durch das Add-on Firebug und beim Internet Explorer 8 unter den Entwicklertools aufgerufen werden (Abb. 1). Den direkten Zugriff als Extension Method verdeutlicht der Blog-Eintrag von René Schulte (Silverlight MVP). Parallel dazu bietet sich die Implementierung als Aspekt an. Somit kann mit einer aspektorientierten Programmierung (AOP) der Sourcecode übersichtlicher gestaltet werden. Mehr zum Thema AOP unter Silverlight bietet der kostenfreie Webcast „Silverlight in Deep“ des gleichen Autors. Wichtig ist, dass auch beim Logging das Thema Sicherheit nicht zu vernachlässigen ist. Die Extension Method dazu finden Sie unter Listing 2 und den Aspekt dazu unter Listing 3.

Abb. 1: Logging unter dem Internet Explorer 9 und den Entwicklertools
Abb. 1: Logging unter dem Internet Explorer 9 und den Entwicklertools

Listing 2: Logging mittels Extension-Method

public static class Logging
{
  public static void Log(this object obj)
  {
    HtmlWindow window = HtmlPage.Window; 
    var isConsoleAvailable = (bool)window.Eval("typeof(console) != 'undefined' && typeof(console.log) != 'undefined'"); 
            
    if (isConsoleAvailable)
    {
      var console = (window.Eval("console.log") as ScriptObject); 
      if (console != null) { console.InvokeSelf(obj); }
    }
  }
}  

Listing 3: Aspekte fürs Logging

using System;
using PostSharp.Aspects;

namespace SilverlightLoggingAspect
{
    public class LoggingAttribute : MethodInterceptionAspect
    {
        public override void OnInvoke(MethodInterceptionArgs eventArgs)
        {
            var methodName = eventArgs.Method.Name.Replace("~", String.Empty);
            var className = eventArgs.Method.DeclaringType.ToString();
            className = className.Substring(className.LastIndexOf(".") + 1, (className.Length - className.LastIndexOf(".") - 1));

            var data = new { MethodName = methodName, ClassName = className };
            data.Log();

            try
            {
                eventArgs.Proceed();
            }
            catch (Exception exception)
            {
                string.Format("failed with error: {0}", exception.Message).Log();
                throw exception;
            }
        }
    }
}  
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -