Public token voor een .NET Assembly achterhalen

Om met nLog te kunnen loggen naar SQL Server compact had ik voor de connectiestring het public token nodig van de SQL CE assembly. Dit is eenvoudig te achterhalen met hetvolgende commando:

 

C:\Program Files\Microsoft SQL Server Compact Edition\v4.0\Desktop>sn -T System.Data.SqlServerCe.dll

Microsoft (R) .NET Framework Strong Name Utility  Version 4.0.30319.1
Copyright (c) Microsoft Corporation.  All rights reserved.

Public key token is 89845dcd8080cc91

Silverlight en cross domain problemen

Toen ik begon met spelen met Silverlight liep ik al snel tegen een probleem aan dat uiteindelijk het cross domain probleem bleek te zijn. Omdat een collega van mij tegen dezelfde problemen aanliep en hier ook tijd mee is kwijtgeraakt even een snelle post met want informatie over het onderwerp.

We beginnen met een filmpje dat al een goede uitleg geeft.

Install Silverlight

En dan nog een linkje naar: Hosting cross-domain Silverlight applications (XAP)

Daarnaast nog een simpele tip, als je een silverlight applicatie hebt draaien op een pc en daarmee toegang wil krijgen tot een webservice op een andere pc, dan kan het zijn dat je ook een cross domain policy nodig hebt. Als je bijvoorbeeld verbinding wil maken met een service via netTcpBinding dan moet je een policyfile aanmaken die aangeeft welke poorten mogen worden benaderd vanuit een silverlight applicatie. Andere snelle (tijdelijke) oplossing is om de silverlight applicatie OOB (Out Of Browser) te draaien, vergeet dan niet “Require elevated trust when running outside the browser”  aan te vinken. Zonder OOB zul he in het geval van netTcpBinding een policy provider moeten hebben draaien op poort 943.

Bij een http binding service kun je de volgende interface met functie toevoegen aan je service:

[ServiceContract]
public interface IClientAccessPolicy
{
  [OperationContract, WebGet(UriTemplate = "/clientaccesspolicy.xml")]
  Stream GetPolicy();
}

System.IO.Stream IClientAccessPolicy.GetPolicy()
{

  // TODO: Modify the string below to set the desired cross-domain policy
            string result = @"<?xml version=""1.0"" encoding=""utf-8""?>
  <access-policy>
    <cross-domain-access>
        <policy>
            <allow-from http-request-headers=""*"">
                <domain uri=""
http://*""/>
            </allow-from>
            <grant-to>
                <resource path=""/"" include-subpaths=""true""/>
            </grant-to>
        </policy>
    </cross-domain-access>
  </access-policy>";

  WebOperationContext.Current.OutgoingResponse.ContentType = "application/xml";
  return new MemoryStream(Encoding.UTF8.GetBytes(result));
}

Er zijn ook templates beschikbaar online (via New Project –> Online templates), hier kun je zoeken op b.v. Silverlight Self-Hosted WCF.

Compleet zinloos maar wel cool!

Dit filmpje kwam ik via Hackaday tegen. Balletjes transporteren op veel moeilijke manieren zonder enig nut.

Booten van USB

Lang is het lastig geweest om te booten van een usb stick.. Veel obscure truckjes en tools, maar sinds een tijd gebruik ik zelf twee tools die heel handig zijn voor het snel installeren / proberen van diverse OS’en. Hier de links naar de twee tooltjes:

Altijd handig om even te bewaren.

Ondertitels

Omdat ik pas weer een site ben tegengekomen met ondertitels bestanden post ik de door mij regelmatig bezochte sites:

Mocht je er nog meer weten dan hoor ik het graag

NLog to Twitter

Voor NLog is het mogelijk om eigen log bestemmingen te implementeren (targets), zo kwam ik de NLog target voor Twitter tegen. Het lijkt met niet heel verstandig om heeel veel debug logging richting Twitter te spammen want dan zal Twitter je calls volgens mijn gaan tegenhouden. Kijk in ieder geval eens hier voor de codeplex pagina.

NLog logging framework

Voor een recent project was ik op zoek naar een goed logging framework voor gebruik binnen een C# ontwikkeling (Visual Studio 2010 / .NET Framework 4.0). Voorheen heb ik voor verschillende toepassingen gebruik gemaakt van log4net. Alleen is het wel van belang dat er nog actief aan ontwikkeld word zodat er ook eventueel support voor te krijgen is van de ontwikkelaar (of actieve community). Als je zoekt naar de activiteit binnen het log4net project dan blijkt dat hier de ontwikkeling wel zo’n beetje is gestopt bij .NET Framework 2.0.

Na een korte zoek tocht kwam ik terecht bij NLog. Qua werking is het nagenoeg hetzelfde als log4net, het is dus betrekkelijk eenvoudig om over te stappen of in te stappen. Onder de downloads is behalve de installer ook de source code te downloaden. Naast de downloads van de site zelf is er ook een pagina met externe tools voor het bekijken van logging. Hier staat onderandere Chainsaw bij, deze wordt ook veel gebruikt voor log4net. De tool die ik zelf heb geprobeerd is Sentinel, deze staat in het lijstje met tools die specifiek voor NLog zijn gemaakt.

Heel handig is dat na de installatie van NLog er templates beschikbaar zijn voor NLog files binnen Visual Studio (2005, 2008 en 2010). Hierbij kun je kiezen voor Empty, Typical en Console. Empty is ja.. euh leeg.. nou ja bijna alleen de meest elementaire xml tags staan in de file. Typical levert een configuratie op met logging naar file en tot slot de console versie levert een versie die ja… naar file schrijft. Binnen Visual Studio (in mijn geval 2010) werkt ook tijdens het kloppen van de NLog configuratie file de intellisense.

<?xml version="1.0" encoding="utf-8" ?> 
<nlog xmlns="
http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true">

  <targets async="true">  
    <target name="file" xsi:type="File" fileName="d:\log.txt" />
    <target name="viewer" xsi:type="NLogViewer" address="udp://127.0.0.1:9999" />
  </targets>

  <rules>
    <logger name="*"
            minlevel="Debug"
            writeTo="viewer,file" />
  </rules>
</nlog>
 

Bij het gebruiken van de bovenstaande configuratie zal er worden gelogd naar de file d:\log.txt en naar de viewer luisterend op adres 127.0.0.1 en poort 9999. Daarbij zal alles met een level boven of gelijk aan Debug worden gelogd. (Off, Debug, Trace, Info, Warn, Error, Fatal). Belangrijk is ook de autoReload=”true”, deze geeft namelijk NLog (ook net als log4net) de opdracht om zijn configuratie files automatisch opnieuw in te lezen en toe te passen bij een wijziging. Er zijn ook events die afgevangen kunnen worden met betrekking to het wijzigen en opnieuw toepassen van configuratie gegevens.
Om nu een heel eenvoudige log te doen volstaat de volgende code:

NLog.Logger _nLogger = NLog.LogManager.GetLogger("LoggingService");
_nLogger.Log(NLog,LogLevel.Info, "Test logging 1 2 3");
 

De eerste regel maakt de logger aan via de LogManager, hierbij geef je de naam van de aan te maken logger mee. Er wordt niet gegarandeerd dat wanneer je de naam van een bestaande logger mee geeft dat je ook de referentie terug krijgt naar die logger (althans volgens de chm file bij versie 2010.04.30.005). Daarna heb je meerde logging functies tot je beschikking.

« Ouder   Nieuwer »