Windows 2008 R2: Remotedesktop (RDP) bricht Verbindung ab nach Installation von SP1


Grund ist das Update KB2667402

Wenn man z.B. über Putty eine Console zur Verfügung hat, kann man das update mittels powershell deinstallieren:

    powershell wusa /uninstall /kb:2667402 /quiet /forcerestart

Oder über wmi wenn man auf dem Server ist:

   wmic /node: process call create "powershell wusa /uninstall /kb:2667402 /quiet /forcerestart"

Oder über wmi:

   wmic /node: /user:administrator process call create "powershell wusa /uninstall /kb:2667402 /quiet /forcerestart"

Wenn alles richtig ist, startet der Server automatisch und dannach gehts wieder.

author: Chris Cluss | posted @ Thursday, April 19, 2012 8:57 AM

STRATO ProNet VLAN und iSCSI auf Windows 2008 R2 einrichten


Strato bietet die Möglichkeit bei mehreren dedizierten Servern diese über ein zweites Netzwerkinterface und einem pivaten Netz mit bis zu einem Gigabit zu vernetzen. Weiterhin kann man über ein iSCSI SAN sicheren Festplattenplatz (1GB umsonst) im Rechenzentrum von Strato dazubuchen.

Tolles Feature... allerdings ist der doch sehr windowsfeindliche Support von Strato nicht gewillt Manuals für die Einrichtung auf Windows bereitzustellen. Telefonisch bekommt man sowieso keine sinvolle Antworten.
Als kleines Beispiel: Bei einer Unereichbarkeit meines Servers gab mir ein unfreundlicher Oliver Bauer (Strato Customer Care) als "Lösung": Windows Server benötigen sehr oft mehr als 3 Stunden für den Bootvorgang. Das ist nun mal ein schwerfälliges System. Linux ist da besser.
Ganz toll Herr Bauer- das hat geholfen! Dankeschön nochmal! 

VLAN und iSCSI einrichten ist auch kein Hexenwerk, wenn man weiß wie es geht.

1. im Configbereich  den Menüpunkt Security=>ProNet VLAN auswählen und bei einem Serverpaket ein Netz(7,5€/Monat) und bei beiden Serverpaketen das VLAN bestellen. (dauert ca.1h bis ein Tag). Man bekommt Emails, wenn es online ist.

Hat man alles Beantragt, sollte bei dem ersten Serverpaket das folgende Bild entstehen(IP-Adressen verändert):

2. Als nächstes muss die Netzwerkkarte aktiviert und eingerichtet werden.

=>Systemsteuerung\Netzwerk und Internet\Netzwerk- und Freigabecenter

=>Adaptereinstellungen ändern

ACHTUNG WICHTIG: Zuerst die Schnittstellenmetrik der ersten Netzwerkkarte anpassen, da ansonsten das aktuelle Gateway nicht das Standardgateway wird und DNS und ähnliches durcheinanderkommt.

=> LAN Verbindung 1 doppelklick => Eigenschaften=>IP Version 4 => Erweitert
Und ganz unten Automatische Metrik ausschalten und die Schnittstellenmetrik auf 1 einstellen.

Jetzt die IP-Einstellungen des neunen privaten Netz eintragen:

=>LAN Verbindung 2 doppelklick => aktivieren=>Eigenschaften=> IP-Einstellungen vornehmen:

zum Beispiel:   

IP-Adresse

10.99.099.8

Subnetzmaske 255.255.255.0
Standardgateway 10.99.099.1

 ACHTUNG WICHTIG: Die Schnittstellenmetrik der zweiten Netzwerkkarte anpassen
=> Erweitert =>Und ganz unten Automatische Metrik ausschalten und die Schnittstellenmetrik auf 2 einstellen.

Als letzter Schritt muß noch eine Route hinzugefügt werden:
CMD.exe als Administrator öffnen und folgenden Befehl mit dem Standardgateway am Ende eingeben:

route ADD 10.0.0.0 MASK 255.0.0.0 10.29.157.1 -p

 Damit ist das Netzwerk eingerichtet und die Server sollten sich anpingen können.

UPDATE (Problem mit DNS und Routing im öffentlichen Netz): eventuell kann es vorkommen, dass beide Server in der Route zum Gateway die selbe IP nutzen (wird von Windows automatisch sortiert). Dies kann mit "Route PRINT" auf beiden Servern ermittelt werden. Dies hat zur folge, dass der Switch beim ausgehenden Traffic Probleme hat.
Konfiguration im grafischen Inteface helfen da nicht weiter! => auf einem Server muss diese IP erst entfernt werden (Windows Interface) und anschließend mit folgendem Befehl eingefügt werden:

    Netsh int ipv4 add address LAN-Verbindung 85.214.111.222 skipassource=true

 3. ProStorage iSCSI SAN im Menüpunkt Security auswählen und eine iSCSI bestellen (1 GB ist umsonst)
Das ist relativ selbsterklärend und die Bereitrstellung dauert nur wenige Minuten

Hier das Endergebnis, wenn man die Details aufruft => nicht vergessen, einen Account anzulegen!

4. Das iSCSI verbinden

WINDOWS Startmenü=> START =>nach iSCSI Initiator suchen und auswählen.
Ist der Dienst nicht aktiv, kommt eine Meldung und der Möglichkeit den Dienst automatisch zu starten.

Als erstes in das Register Suche gehen und Portal ermitteln klicken und folgendes einstellen.

DNS-Name storage2.stratoserver.net
Erweitert klicken  
Lokaler Adapter Microsoft iSCSI-Initiator
Initiator-IP IP Des Netzwerkinterface (im Screenshot 10.99.099.8)
Chap-Anmeldung aktivieren
Name die UserID (im Screenshot "s00000")
Zielschlüssel das Passwort  (im Screenshot "pwd1234")

und zwei Mal OK klicken.

Hier sollte keine Fehlermeldung kommen.

DANN Register Ziele:
Hier sollten bei erkannte Ziele dasiSCSI-Gerät als inaktiv angezeigt werden.
Dieses auswählen und Verbinden klicken.

Zielname bereits eingetragen
Diese Verbindung der Liste bevorzugter Ziele hinzufügen aktiviert
Erweitert klicken  
Lokaler Adapter Microsoft iSCSI-Initiator
Initiator-IP IP Des Netzwerkinterface (im Screenshot 10.99.099.8)
Zielportal-IP Standard
Chap-Anmeldung aktivieren
Name die UserID (im Screenshot "s00000")
Zielschlüssel das Passwort  (im Screenshot "pwd1234")

Zwei mal OK und das Gerät sollte verbunden sein.
Einmal auf Aktualisieren klicken, damit das Ziel für die Windows DAtenträgerverwaltung sichtbar wird.
Anschlißend ISCSI-Initiator schließen oder auch nicht ;-)

5. iSCSI einbinden

=> Servermanager=>Speicher =>Datenträgerverwaltung
hier sollte die iSCSI SAN nun als Datenträger sichtbar sein und kann genau wie jeder Datenträger formatiert und mit Laufwerkbuchstaben versehen werden.

 

 

 

author: Chris Cluss | posted @ Monday, December 5, 2011 5:39 PM

Encoding bei Fitsms


Mit Fitsms kann man SMS versenden und zwar durch Aufruf einer URL und entspechenden Requestparametern.

Eigentlich kein Problem, nur reicht ein Standard httpUtility.UrlEncode nicht um Sonderzeichen zu übergeben.
Die benötigte Codierung ist Windows-1252, was ich durch Try'nError herausgefunden habe.
Aber auch das reicht noch nicht da das Zeichen "ü" zu %fc wird und fitSMS codierte Zeichen aber in uppercase verlangt.

Heraus kommt als Lösung folgendes:


Public Class smsGateWay

    Private _username As String
    Public Property userName() As String
        Get
            Return _username
        End Get
        Set(ByVal value As String)
            _username = value
        End Set
    End Property

    Private _password As String 
    Public Property password() As String
    
    Get
            Return _password
        End Get
        Set(ByVal value As String)
            _password = value
        End Set
    End Property

    Private _SMSKennung As String 
    Public Property SMSKennung() As String
        Get
            Return _SMSKennung
        End Get
        Set(ByVal value As String)
            _SMSKennung = value
        End Set
    End Property

    Public Result As XElement
    Public ErrorMessage As String = ""

    Function getFromURL(ByVal url As String) As String
        Dim request As System.Net.WebRequest = System.Net.WebRequest.Create(url)
      
        Dim response As System.Net.WebResponse

        response = request.GetResponse()

        Dim responseStream As System.IO.Stream = response.GetResponseStream()

        Dim reader As System.IO.StreamReader = New System.IO.StreamReader(responseStream)

        Return reader.ReadToEnd()

    End Function

    Public Shared Function UrlEncodeUpperCase(value As String, e As Text.Encoding) As String
        value = HttpUtility.UrlEncode(value, e)
        Return Regex.Replace(value, "(%[0-9a-f][0-9a-f])", Function(c) c.Value.ToUpper())
    End Function

    Public Function sendTextSMS(text As String, MobileNumber As String) As Boolean
        Dim url As String = "https://gateway.fitsms.de/sms/http2sms.jsp?" & _
                                "username=" & userName & _
                                "&password=" & password & _
                                "&type=text&" & _
                                "from=" & SMSKennung & _
                                "&to=" & MobileNumber & _
                                "&content=" & UrlEncodeUpperCase(text, Encoding.GetEncoding("Windows-1252"))

        Dim s = getFromURL(url)

        Try
            Dim x As New XElement(XElement.Parse(s))
            Result = x
            If x..Count > 0 Then
                If x..First.Value = "SUCCESS" Then
                    ErrorMessage = "Success"
                Else
                    ErrorMessage = x..First.Value
                End If
                Return x..First.Value = "SUCCESS"
            Else
                Return False
            End If
        Catch ex As Exception
            ErrorMessage = ex.Message
            Return False
        End Try

    End Function


End Class 

author: Chris Cluss | posted @ Friday, July 29, 2011 1:29 PM

"Online-Verhalten" oder "Interesse-basierte" Werbung per cookie ausschalten


Seit ein paar Monaten nervt mich mehr und mehr, dass ich Werbung eingeblendet bekomme von Websites die ich zuvor besucht hatte.

Auf dieser Website, kann man das auf einen Schlag für 74 Anbieter ausschalten.

author: Chris Cluss | posted @ Saturday, July 23, 2011 10:25 AM

Der Volltextabfrageparameter für 'Volltextabfragezeichenfolge' ist nicht gültig.


Bei der Umstellung einer Website auf .NET 4.0 bekam ich bei der mit Linq2SQL und einer Tabellenwertfunktion den folgenden Fehler:

   "Der Volltextabfrageparameter für 'Volltextabfragezeichenfolge' ist nicht gültig."

Grund ist, dass Linq2SQL die Parametergröße automatisch auf 8000 Zeichen(varchar) bzw. 4000 Zeichen (nvarchar) setzt.

Die Parameter der Function musste ich also nur anpassen:
ALTER FUNCTION [dbo].[Search_Community]
(
@search nvarchar(4000)
)
RETURNS TABLE
AS
RETURN
(
SELECT KEY_TBL.[KEY] as d_UserContentID, KEY_TBL.RANK as Relevance
FROM CONTAINSTABLE(t_ContentBlog, *, @search) AS KEY_TBL
)

author: Chris Cluss | posted @ Saturday, July 16, 2011 7:17 PM

Flash To Silverlight Converter


http://www.silverx.net/

author: Chris Cluss | posted @ Saturday, April 17, 2010 10:56 AM | Feedback (0)

Microsoft Office Outlook kann nicht gestartet werden. Das Outlook-Fenster kann nicht geöffnet werden


Nach der Installation von Office SP2 bekam ich folgende Fehlermeldung:

"Microsoft Office Outlook kann nicht gestartet werden. Das Outlook-Fenster kann nicht geöffnet werden"

Die Lösung ist Outlook mit "/resetnavpane" zu starten.

outlook.exe /resetnavpane

http://www.kultiversum.de/shop.html?ht=7059


author: Chris Cluss | posted @ Wednesday, December 9, 2009 12:41 PM | Feedback (0)

USB-Funk-Tastatur funktioniert beim booten nicht


Seit Mai habe ich ein Intel DX58SO mit I7.

Prinzipiell auch alles prima. Aber wenn ich Windows im abgesicherten Modus starten will (F8 beim booten) oder wenn ich ein Screen kam wie: Probleme beim Starten wollen Sie im abgesicherten M0dus starten, funktionierte die Tastatur einfach nicht. Also zwischen Bios und Win7 oder Vista.

Hilfe schaffte eine Einstellung im Bios, die per default disabled ist:

USB LEGACY - "Enables to enumerateUSB-Devices to older OS tzhzat are not USB aware"

Aha ... wieder was gelertnt.

 

author: Chris Cluss | posted @ Wednesday, December 9, 2009 8:43 AM | Feedback (0)

HTC HD2 - Remotedesktop auf dem Handy


Das letzte Argument ist gefunden.... brauch ich ja eigentlich nicht aber das Video liefert letzte fadenscheinige Argumente

;-)

http://www.youtube.com/watch?v=QFiDZ_wBAtM

author: Chris Cluss | posted @ Thursday, November 19, 2009 10:48 PM | Feedback (0)

ROW_NUMBER() in einem Update Statement //MSSQL


Um In einer Tabelle eine durchnummerirte Spalte  einzufügen kann man folgende Anweisung nutzen:

Alter Table [Table1] add ID_ int

Go

WITH TMP1 AS (  SELECT [ID_] ,ROW_NUMBER()over(order by Feld1,Feld2)  as Seq  FROM Table1  )
UPDATE TMP1 SET [ID_] = Seq

author: Chris Cluss | posted @ Monday, October 19, 2009 12:11 PM | Feedback (2)

MSSQL - Alle Tabellen in einer Datenbank auflisten


Hier ein SQL-Code, mit dem man alle Tabllen einer DB auflistet und die Anzahl der Felder, der Datensätze  sowie die Größe der Daten auflisten kann:

CREATE

TABLE #temp (table_name sysname ,row_count INT,reserved_size VARCHAR(50),
data_size VARCHAR(50),index_size VARCHAR(50),unused_size VARCHAR(50))
SET NOCOUNT ON INSERT #temp
EXEC sp_msforeachtable 'sp_spaceused ''?'''
SELECT a.table_name,a.row_count,COUNT(*) AS col_count,a.data_size FROM #temp a INNER JOIN information_schema.columns b ON a.table_name collate database_default= b.table_name
collate database_default GROUP BY a.table_name, a.row_count, a.data_size
ORDER BY CAST(REPLACE(a.data_size, ' KB', '') AS integer) DESC DROP TABLE #temp

author: Chris Cluss | posted @ Wednesday, September 30, 2009 9:44 PM | Feedback (2)

Endlich mal ein wirklich lustiges Video


Die Masse der Videos im Internet bieten eigentlich nichts Neues.

Das folgende Video allerdings...[man muß es länger anschauen]   bringt mich immer wieder zum lachen.

 

Also unbedingt 10 Minuten anschauen: http://aaaah.dreamworld.hu/

 

author: Chris Cluss | posted @ Tuesday, September 22, 2009 5:48 PM | Feedback (0)

Start SingleInstance of Application /VB-.NET


Nachdem ich bei Klaus gelesen hatte, wie er es gelöst hat, eine App nur einmal zu starten, musste ich nochmal extrem nachdenken, bei welchem Projekt und wie ich das gelöst hatte.

Das mir das nicht nochmal passiert, habe ich hier mal den Code verewigt.

Ursprünglich von Codeproject in c#.

    1 Imports System

    2 Imports System.Windows.Forms

    3 Imports System.Runtime.InteropServices

    4 Imports System.Text

    5 Imports System.Diagnostics

    6 Imports System.Threading

    7 Imports System.Reflection

    8 Imports System.IO

    9 

   10 Namespace SingleInstance

   11     ''' <summary>

   12     ''' Summary description for SingleApp.

   13     ''' </summary>

   14     Public Class SingleApplication

   15 

   16         Public Sub New()

   17         End Sub

   18         ''' <summary>

   19         ''' Imports

   20         ''' </summary>

   21 

   22         <DllImport("user32.dll")> _

   23         Private Shared Function ShowWindow(ByVal hWnd As IntPtr, _

   24                                            ByVal nCmdShow As Integer) As Integer

   25         End Function

   26 

   27         <DllImport("user32.dll")> _

   28         Private Shared Function SetForegroundWindow(ByVal hWnd As IntPtr) As Integer

   29         End Function

   30 

   31         <DllImport("user32.dll")> _

   32         Private Shared Function IsIconic(ByVal hWnd As IntPtr) As Integer

   33         End Function

   34 

   35         ''' <summary>

   36         ''' GetCurrentInstanceWindowHandle

   37         ''' </summary>

   38         ''' <returns></returns>

   39         Private Shared Function GetCurrentInstanceWindowHandle() As IntPtr

   40             Dim hWnd As IntPtr = IntPtr.Zero

   41             Dim process As Process = Process.GetCurrentProcess()

   42             Dim processes As Process() = Process.GetProcessesByName(process.ProcessName)

   43             For Each _process As Process In processes

   44                 ' Get the first instance that is not this instance, has the

   45                 ' same process name and was started from the same file name

   46                 ' and location. Also check that the process has a valid

   47                 ' window handle in this session to filter out other user's

   48                 ' processes.

   49                 If _process.Id <> process.Id _

   50                     AndAlso _process.MainModule.FileName _

   51                         = process.MainModule.FileName _

   52                     AndAlso _process.MainWindowHandle _

   53                         <> IntPtr.Zero Then

   54                     hWnd = _process.MainWindowHandle

   55                     Exit For

   56                 End If

   57             Next

   58             Return hWnd

   59         End Function

   60         ''' <summary>

   61         ''' SwitchToCurrentInstance

   62         ''' </summary>

   63         Private Shared Sub SwitchToCurrentInstance()

   64             Dim hWnd As IntPtr = GetCurrentInstanceWindowHandle()

   65             If hWnd <> IntPtr.Zero Then

   66                 ' Restore window if minimised. Do not restore if already in

   67                 ' normal or maximised window state, since we don't want to

   68                 ' change the current state of the window.

   69                 If IsIconic(hWnd) <> 0 Then

   70                     ShowWindow(hWnd, SW_RESTORE)

   71                 End If

   72 

   73                 ' Set foreground window.

   74                 SetForegroundWindow(hWnd)

   75             End If

   76         End Sub

   77 

   78         ''' <summary>

   79         ''' Execute a form base application if another instance already running on

   80         ''' the system activate previous one

   81         ''' </summary>

   82         ''' <param name="frmMain">main form</param>

   83         ''' <returns>true if no previous instance is running</returns>

   84         Public Shared Function Run(ByVal frmMain As System.Windows.Forms.Form) As Boolean

   85             If IsAlreadyRunning() Then

   86                 'set focus on previously running app

   87                 SwitchToCurrentInstance()

   88                 Return False

   89             End If

   90             Application.Run(frmMain)

   91             Return True

   92         End Function

   93 

   94         ''' <summary>

   95         ''' for console base application

   96         ''' </summary>

   97         ''' <returns></returns>

   98         Public Shared Function Run() As Boolean

   99             If IsAlreadyRunning() Then

  100                 Return False

  101             End If

  102             Return True

  103         End Function

  104 

  105         ''' <summary>

  106         ''' check if given exe alread running or not

  107         ''' </summary>

  108         ''' <returns>returns true if already running</returns>

  109         Private Shared Function IsAlreadyRunning() As Boolean

  110             Dim strLoc As String = Assembly.GetExecutingAssembly().Location

  111             Dim fileInfo As FileSystemInfo = New FileInfo(strLoc)

  112             Dim sExeName As String = fileInfo.Name

  113             Dim bCreatedNew As Boolean

  114 

  115             mutex = New Mutex(True, "Global\" + sExeName, bCreatedNew)

  116             If bCreatedNew Then

  117                 mutex.ReleaseMutex()

  118             End If

  119 

  120             Return Not bCreatedNew

  121         End Function

  122 

  123         Shared mutex As Mutex

  124         Const SW_RESTORE As Integer = 9

  125     End Class

  126 End Namespace

  127 

  128 

 

 

author: Chris Cluss | posted @ Saturday, August 29, 2009 7:53 AM | Feedback (0)

Generic List(Of ClassName) im Repeater


Manchmal ist es ganz praktisch eine Generic List im Repeater zu nutzen.

Mit <%# eval("Parameter")%> kommt man aber nicht weit.

Mit <%# Container.DataItem.Value1 %>aber schon:

Public Class ClassName
    
Public Value1 As String
    
Public Value2 As String
End Class

Dim Listname As New List(Of ClassName)
Dim Item1 As New ClassName

Item1.Value1 =
"TestValue1"
Item1.Value2 = "TestValue2"
Listname.Add(Item1)

Repeater1.DataSource = Listname
Repeater1.DataBind()

 

<asp:Repeater ID="Repeater1" runat="server">
  
<ItemTemplate>
        
<%#Container.DataItem.Value1%>
  
</ItemTemplate>
</asp:Repeater>

author: Chris Cluss | posted @ Thursday, August 27, 2009 4:51 PM | Feedback (0)

Das Debugging kann auf dem Webserver nicht gestartet werden. Die Objektkennung gibt kein gültiges Objekt an. (Ausnahme von HRESULT: 0x800710D8)


Ein dummer Fehler beim Konfigurieren führte dazu, daass das debuggen mit IIS7 und VS2008 nicht mehr funktionierte.

Sicherlich gibt es noch andere Ursachen für den Fehler... grundsätzlich fehlt die Windowsauthentifizierung.
Bei mir half das Folgende:

 

Windows-Authentifizierung muß aktivert sein!

 

author: Chris Cluss | posted @ Thursday, August 27, 2009 8:40 AM | Feedback (0)

Autocompletion und Quickedit in cmd.exe


Zwei Keys in Registry vereinfachen die Arbeit in der cmd.exe.

CompletionChar: vervollständigt den Dateinamen durch drücken von TAB  (Eingabe "c:\wi + TAB" => "c:\Wndows")
QuickEdit: Ermöglicht das markieren eines Textes mit der Maus ohne erst den rechten Mausklick usw.

Folgenden Tesxt einfach in eine Textdatei mit der Endung ".reg" speichern und einen Doppelklick darauf machen.

;-------------SCHNIPP--------quickedit.reg------------
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Console]
"QuickEdit"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor]
"CompletionChar"=dword:00000009
;-------------SCHNAPP--------------------------------


 

author: Chris Cluss | posted @ Thursday, August 27, 2009 8:00 AM | Feedback (0)

Ausnahme von HRESULT: 0x80070057 (E_INVALIDARG)


Der Launchtermin rückt näher... höcchte Zeit für Problemme auf dem Entwicklungsserver.

Der Speicher scheint einen Fehler zu haben und nötigt Windows 2008 Server zu unvermittelten Abstürzen.

Das zu ertragen ist zwar nicht schön, aber da es nur 1 Mal täglich ist, ist die Zeit für Nachforschungen nicht da.

Nach so einem Absturz heute, bekam ich untenstehende Fehlermeldung auf der Website.
Auch das vielfach empfohlene reparieren des .NET Framework und löschen der Dateien in C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files half leider nichts.

ABER: Das Anlegen einer neuen Website im IIS7 mit dem selben Verzeichnis, lies die Website wieder funktionieren.
Also vermutlich irgendwas von den Metadaten im IIS verloren gegangen.

Weiter gehts noch ein e Woche Zeit. Hoffen wir das Beste ;-)
 

Die Datei oder Assembly oder eine Abhängigkeit davon wurde nicht gefunden. Falscher Parameter. (Ausnahme von HRESULT: 0x80070057 (E_INVALIDARG))

Beschreibung: Unbehandelte Ausnahme beim Ausführen der aktuellen Webanforderung. Überprüfen Sie die Stapelüberwachung, um weitere Informationen über diesen Fehler anzuzeigen und festzustellen, wo der Fehler im Code verursacht wurde.

Ausnahmedetails: System.IO.FileLoadException: Die Datei oder Assembly oder eine Abhängigkeit davon wurde nicht gefunden. Falscher Parameter. (Ausnahme von HRESULT: 0x80070057 (E_INVALIDARG))

author: Chris Cluss | posted @ Saturday, August 22, 2009 2:38 PM | Feedback (0)

Fulltext-Search in SQLExpress aktivieren


Wenn man im SQL Management Studio eine SQLExpress Datenbank verwaltet, dann werden die Volltextfeatures und Dialoge nicht angezeigt. Dennoch sind sie aber vollständig vorhanden und nutzbar.

--- Erst einen Katalog erstellen

CREATE FULLTEXT CATALOG [TestKatalog] WITH ACCENT_SENSITIVITY = OFF

--- Die Tabelle dem erstellten Katalog zuordnen und den PrimaryKey
--- (hier [PK_CMS_Key]) angeben

FULLTEXT INDEX ON [dbo].[CMS_Tabellenname]
KEY INDEX [PK_CMS_Key] ON ([TestKatalog]) WITH (CHANGE_TRACKING AUTO)

Go

--- die Spalten hinzufgen, die im Index enthalten sein sollen
ALTER FULLTEXT INDEX ON [dbo].[CMS_Tabellenname]  ADD ([Body],[Headline] LANGUAGE [German])

Go
--- und das Ganze aktivieren
ALTER FULLTEXT INDEX ON [dbo].[CMS_Tabellenname] ENABLE

--- Warten bis der Index erstellt ist (der Taskmanager geht
--- dabei auf fast 100%)
--- Jetzt kann der Index benutzt werden:

Select * from [CMS_Tabellenname] where contains(Body,'suchbegriff')

 

author: Chris Cluss | posted @ Sunday, August 16, 2009 10:42 AM | Feedback (0)

Platzhalter im FCKEditor einbauen und mit Linq bestimmte Tags in HTML finden, bearbeiten oder ersetzen.


In einem ASP.NET CMS habe ich eine Möglichkeit gesucht in einem FCKEditor diverse Platzhalter in Artikel-Tex einzusetzen, die später dann durch aktuelle Inhalte und Werbung ersetzt werden könne.
 
Am schönsten wäre es natürlich, wenn es auch im Editor bereits angezeigt wird um zu sehen, wie der Text um den potentiellen Inhalt läuft.
 
Die API des FCKEditors möchte ich nicht anfassen also muß iich mit vorhandenen Mitteln zu Rande kommen.
 
Trick 1.
Um die Größe und Position im Content zu definieren, nehme ich ein image in vergleichbarer Größe (wie das Bild rechts).
 
Trick 2.
Ich definiere mir Styles für den FCKEditor und generiere diese mit einem Webform.
Einbinden kann man diese über
fckBody.StylesXmlPath = "/_admin/artikel/stylesXMLPath.aspx?ArtikelID=123"&rdm=123"
 
G generiert wird dort das folgendeXML:
<?xml version="1.0" encoding="utf-8" ?>
<Styles>
     <Style name="1.Hintergrundinformation " element="img">
         <Attribute name="class" value="beistellerRechts"/>
         <Attribute name="dataid" value="534"/> Die DataID wird dynamisch erzeugt und definiert dei Auswahl
     </Style>
     <Style name="2.Related Links" element="img">   Styles werden nur bei aktiviertem Image angezeigt
         <Attribute name="class" value="beistellerRechts"/>
         <Attribute name="dataid" value="535"/>
     </Style>
 </Styles>
 
Also nach dem ich das Bild hochgeladen habe und das Image markiert habe, sind die dynamischen Styles verfügbar. Da auch eine cssClass im Style definiert ist, bekommt es auch gleich ein float:left und ein Margin:10px verpasst.
Das coole daran ist, dass dort für jenbden verfügbaren Content eine DataID als Atttribut in den ImageTag speichern kann, durch die ich später gezielt bestimmte Informationen anstelle des Bildes einfügen kann.
 
Sicher werden jetzt einige sagen, dass man dafür ja tolle Regexps schreiben könnte um das auszutauschen.
Ist mir ber zu unübersicchtlich und ich mache einfach zu wenig damit...
 
Aber mit Linq ist das ein Kinderspiel
 
        'Damit eleminieren wir alle ungültigen HTML-Entiäten
        ' Wir sprechen UTF-8 und haben seit vielen Jahren moderne Browser also weg mit den
        ' &nbsp; und &uuml; diese crashen das Xelement
        Dim Body As String = Server.HtmlDecode(ArtikelEntry.Body)
 
        'Ein Xelement draus machen
        Dim xEle = XElement.Parse("<root>" & Body & "</root>")
 
 
        '<img dataid="534" src="/userfiles/image/Beisteller.png" class="beistellerRechts" />
        'Mit dem Style im FCKEditor hat der Imagetag über eine Style-Definition
        'eine dynamische DataID bekommen.
 
        'Alle ImageTags ermitteln die eine DataID definiert haben.
        Dim k = From k1 In xEle...<img>  Where k1.@dataid > 0
 
        While k.Count > 0
 
             Dim img = k.First
            Dim dataid = img.@dataid  'DataId ermitteln um speziellen HTMLCode zu generieren  
                                                     '(überspringe ich hier mal)
 
            img.AddBeforeSelf(<b>Neuer HTML-Code z.B. DB-Abfrage usw.</b>)
            img.Remove() 'nach dem Remove neu abfragen
 
             'Alle ImageTags ermitteln die eine DataID definiert haben.
            k = From k1 In xEle...<img>  Where k1.@dataid > 0
 
        End While
 
        'Dummerweise habe ich noch keine Möglichleit _
        ' beim xElement ein innerXML ermitteln
        'Dann halt das gute XMLDocument bemühen um den ersetzten HTML-Code zu bekommen
        Dim xDoc As New XmlDocument
        xDoc.LoadXml(xEle.ToString)
 
        ArtikelEntry.Body = xDoc.InnerXml
 
Das wars... Ich liebe Linq

author: Chris Cluss | posted @ Wednesday, August 12, 2009 11:28 PM | Feedback (0)

xmlns Namespace in Linq und Datenimport nach SQLServer //mit VB.NET


Eigentlich hatte Martin Hey genau im richtigen Moment seinen Post zum Thema veröffentlicht.

 

Aber dann fiel mir ein, dass wenn es einen Vorteil von VB.NET gegenüber c# gibt, dann ja wohl im XML-Bereich.

 

Ein Imports am Kopf der Seite reicht um den Namespace Global einzufügen.

Das Ganze gepaart mit einem InsertAllOnSubmit habe ich in ein paar wenigen Zeilen alle Categories aus meinem XML-Dokument in die Datenbank importiert.

 

 

    1 Imports <xmlns="http://www.ticketonline.de/ticketonlineevents/1.0">

    2 Imports <xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    3 

    4 Partial Class LoadTicketOnline

    5     Inherits System.Web.UI.Page

    6 

    7     Protected Sub Page_Load(ByVal sender As Object, _

    8                             ByVal e As System.EventArgs) Handles Me.Load

    9 

   10         Dim XMLPath As String = Server.MapPath("/LoadticketOnline.XML")

   11         Dim x As XDocument = XDocument.Load(XMLPath)

   12 

   13         Response.Write(x.<ticketonlineevents>.<categories>.<category>.Count)

   14 

   15         Dim dbEvents As New dbEventsDataContext

   16 

   17         Dim categories = From p1 In x.<ticketonlineevents>.<categories>.<category> _

   18                          Select New t_EventCategory With _

   19                                 { _

   20                                 .d_CategoryID_TO = p1.@id.Substring(3), _

   21                                 .d_name = p1.@name, _

   22                                 .d_name_TO = p1.@name _

   23                                 }

   24 

   25         dbEvents.t_EventCategory.InsertAllOnSubmit(categories)

   26         dbEvents.SubmitChanges()

   27 

   28     End Sub

   29 End Class

 

 Und ein Ausschnitt aus der XML-Datei:

 

    1 <?xml version="1.0" encoding="utf-8"?>

    2 <ticketonlineevents xmlns="http://www.ticketonline.de/ticketonlineevents/1.0"

    3                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    4                     xsi:schemaLocation="http://www.ticketonline.de/ticketonlineevents/1.0/ticketonlineevents.xsd">

    5     <meta>

    6         <builddate>2009-07-30T07:15:01+02:00</builddate>

    7         <source>Datenquell1</source>

    8         <language>de</language>

    9     </meta>

   10     <categories>

   11         <category id="cat1000" name="all" />

   12         <category id="cat126" name="festival" />

   13         <category id="cat129" name="festival-other" />

   14         <category id="cat127" name="festival-classics" />

   15         <category id="cat128" name="festival-rock-pop" />

   16     </categories>

   17 </ticketonlineevents>

author: Chris Cluss | posted @ Thursday, July 30, 2009 5:46 PM | Feedback (0)

Vague but exiting // von der Geburtsstunde des WWW


"Eine Person muss in der Lage sein Informationen zu finden, von denen sie nicht wußte, dass sie sie gesucht hat."

Schrieb Tim Berners-Lee im März 1989  in einem Antrag am europäischen Kernforschungszetrum CERN, in dem er eine Software schreiben wollte, die es den Wissenschaftlern einfacher macht Informationen auszutauschen.


Sein Chef kommentierte diesen Antrag mit: "Vague but exiting".

Er verwirklichte dieses Projekt und entwickelte dazu den ersten Browser WorldWideWeb und den ersten Webserver unter dem Betriebssystem NeXTStep. Dies sollte den Ursprung des World Wide Webs darstellen.

 Zusammengefasst mit den ersten Gehversuchen des ARPA-Net in einem 30-minütigem "neues spezial"

kick it on dotnet-kicks.de

author: Chris Cluss | posted @ Tuesday, July 28, 2009 8:43 AM | Feedback (0)

Also sowas .... Datum in Javascript


Mit was für Fehlersuche man doch die Zeit verbringen kann.

Ich validiere per Javascript ein Geburtsdatum.

Ganz einfach:

Ein neues Datum erstellen und mit dem weiterarbeiten.

 var dummyDate = new Date(iYear, iMonth, iDay);

Ganz so einfach ist es nicht.
Der Monat ist Zero-Based also 9 für Oktober usw.

Also sowas ;-)

author: Chris Cluss | posted @ Friday, July 24, 2009 12:28 PM | Feedback (2)

Farbpaletten


Als Memo für mich:

Hannes schreibt kurz über "Gutes Design beginnt bei stimmigen Farben" und wie man Farbpaltten in Expression Design importieren kann.

Keine neuen Erkentnisse, aber den Link http://de-de.colourlovers.com/ fand ich hilfreich.

 

 

author: Chris Cluss | posted @ Friday, July 24, 2009 10:30 AM | Feedback (0)

Single-Sign-On mit ASP.NET


In seinem Artikel Building a Single Sign On Provider Using ASP.NET and WCF zeigt Mark J. Miller in 4 Teilen, wie man mit Hilfe von JASONP  ein Single Sign on implementieren kann.

 

kick it on dotnet-kicks.de

author: Chris Cluss | posted @ Thursday, July 9, 2009 8:52 AM | Feedback (0)

14 Javascript Resources zum Generieren von Charts


OOYES.NET hat 14 Javasceript -Resources zusammengefasst, mit den man Charts in Javascript generieren kann.
Von umsonst bis kostenpflichtig. Ein kurzer Blick lohnt auf jeden Fall

OOES.NET beschreibt diese noch kurz mit kleinen Screenshots:

http://ooyes.net/resources/14-javascript-resources-and-plugins-for-creating-a-stylish-chart

 

Die folgenden Links sind nur zu meiner Dokumentation:

 

Creating accessible charts using canvas and jQuery
Emprise JavaScript Charts
Flot
Pie Chart with Tooltips
jQuery Google Charts
jQuery Sparklines
moochart
JS Charts 
ProtoChart
Raphaël—JavaScript Library
PlotKit
Flotr Javascript Plotting Library
Yahoo! UI Library: Charts
TufteGraph


kick it on dotnet-kicks.de

author: Chris Cluss | posted @ Wednesday, July 8, 2009 7:31 AM | Feedback (0)