Archive for Oktober, 2007

DOTNET: Ab sofort mit SourceCode

Na, das ist doch mal eine gelungene Nachricht: Microsoft will laut Scott Guthrie das .NET-Framework zuk=FCnftig mit dem Quellcode der Steuerelemente und der =
Klassenbibliotheken ausliefern. Ich finds gut, denn auf die Art und Weise kann man eine Menge lernen und ggf. Fehler besser eingrenzen.

ASP.NET: Inhalt einer ASPX-Seite abrufen und weiterverwenden

Ja, klar, natürlich: Per Http-Request, WebClient oder ähnlichen Tools geht es immer. Was aber, wenn eine Seite aus der lokalen Webapplikation aufgerufen werden soll – geht das nicht einfacher und ressourcenschonender?

Tatsächlich geht das. Man muss lediglich die Server.Execute()-Methode ein wenig mißbrauchen – und wissen, dass man da durchaus auch eigene Parameter übergeben kann. Dann sieht der Code sehr simpel aus, denn Server.Execute() verfügt über einen Überladung, bei der eine StringWriter-Instanz als Parameter übergeben werden kann. Und in der steht dann der generierte HTML-Quellcode.

Lange Rede, kurzes Beispiel:

// URL definieren
string url = “~/Foo.aspx?parameter=bla”;

// HTML-Code abrufen
StringWriter sw = new StringWriter();
HttpContext.Current.Server.Execute(url, sw);
string html = sw.GetStringBuilder().ToString();

Fertich.

Braindump: Visual XPath-Tool

Gerade eben in einem Newsgroup-Posting dr=FCber gestolpert: Das Visual =
XPath-Tool zum Erstellen von funktionierenden XPath-Abfragen im =
.NET-Framework (Ich sag nur: Default-Namespaces).

Infos dazu hier: http://weblogs.asp.net/nleghari/articles/27951.aspx.

NHibernate: XML-Daten mappen

Schade, heute hätte ich es mal gebraucht: Eine Unterstützung für den XML-Datentyp von SQL Server 2005 in NHibernate oder die Möglichkeit, XML irgendwie nativ wegzuspeichern. Bekomme ich aber nicht, stattdessen nur die Fehlermeldung, dass der Mapper damit nix anfangen könne.

Ein kleiner Workaround ist mir allerdings geblieben:

  • Die Daten werden jetzt als NText gespeichert und in einer als protected gekennzeichneten Eigenschaft gehalten
  • Diese wird in NHibernate gemapped, während gleichzeitig eine als public gekennzeichnete Eigenschaft existiert, die aber nicht gemapped ist
  • Der Zugriff nach außen findet über eine Eigenschaft vom Typ XmlDocument statt, in die ich zur Laufzeit das geladene XML einlade bzw. aus der ich es mir beim Speichern hole
  • Zum Speichern wird auf [Öffentliche Eigenschaft].OuterXml zugegriffen
  • Beim Laden werden die Daten per LoadXML() ins XML-Dokument eingelesen

Der Code der Klasse sieht so aus:

using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;

namespace CYTShops.Customers.Ebay
{
   ///

   /// Represents an exported item
   ///

   public class EbayExportedItem
   {

      private int _id;

      ///

      /// Id of the item
      ///

      public virtual int Id
      {
         get { return _id; }
         set { _id = value; }
      }

      private string _ebayId;

      ///

      /// Ebay-ID of the item
      ///

      public virtual string EbayId
      {
         get { return _ebayId; }
         set { _ebayId = value; }
      }

      ///

      /// Xml-Code of the itemn
      ///

      protected virtual string Xml
      {
         get { return XmlData.OuterXml; }
         set { XmlData.LoadXml(value); }
      }

      private XmlDocument _xmlNode = new XmlDocument();

      ///

      /// XmlNode for external access
      ///

      public virtual XmlDocument XmlData
      {
         get { return _xmlNode; }
         set { _xmlNode = value; }
      }

   }
}

Beim Mapping kann jetzt auf die für das Speichern nicht notwendige Eigenschaft XmlData verzichtet werden:

< ?xml version="1.0" encoding="utf-8" ?>
                   namespace=”CYTShops.Customers.Ebay”
                   assembly=”CYTShops.Customers.Ebay”>

  

     
     
        
     

     
     
           
     
           
  
  

Nicht schön, aber dafür selten.

NHibernate: Unknown entity class

Falls sich jemand wundern sollte, wieso NHibernate sich bei einer =
Klasse, die definitiv gemappt worden ist, dar=FCber =
beschwert, dass es sich um eine “unknown entity class” handele: Es =
k=F6nnte sein, dass die Mapping-Datei nicht [Klassenname].hbm.xml, =
sondern irgendwie anders hei=DFt. Am Besten [Klassenname].hmb.xml =
oder [Klassenname].hbn.xml.=20

Kann man auch gerne mal als Gag versuchen – vorzugsweise, wenn man neu =
irgendwo ist und sich schnell einen Namen als unverzichtbarer Crack =
machen m=F6chte. Oder wenn man ohnehin zuviel Zeit hat.

Fehlermeldungen, die die Welt nicht braucht

Heutiger Favorit: Visual Studio 2005 mit der Meldung:

Die Anwendungsdomäne, in der der Thread ausgeführt wurde, wurde entladen.

Beim Kompilieren. Hat ihm wohl zu lange gedauert.

« Vorherige Seite