Profiling bei Visual Studio 2013 und lokalem IIS : Website Metabase Fehler

Bei meinem letzten ASP.NET Projekt wollte ich mit dem lokalen IIS und Visual Studio 2013 Professional ein Performance Profiling durchführen.

Normalerweise verwendet Visual Studio seinen eigenen IIS Express. Der hat aber diversere Einschränkungen; z.B. kann er keine reinen x64 Anwendungen ausführen. So führt nun der lokal auf Windows 8.1 installierte IIS die Anwendung aus, und Visual Studio übernimmt das Debugging. Ebenso das Performance Profiling muss sich beim IIS bedienen.

Beim Start der Profiling Session gab es folgende Fehlermeldung:

Die Website-Metabase enthält unerwartete Informationen, oder Sie sind nicht berechtigt, auf die Metabase zuzugfreifen. Sie müssen ein Mitglied der Administratorgruppe auf dem lokalen Computer sein, um auf die IIS-Metabasis zuzugreifen. Daher können Sie keine lokale IIS-Website erstellen oder öffnen. Wenn Sie Berechtigungen  zum Lesen, Schreiben und Ändern für den Ordner besitzen, in dem sich die Dateien befinden, können Sie eine Dateisystem-Website erstellen, die auf den Ordner zeigt, um mit dem Vorgang fortzufahren.Die Website-Metabase enthält unerwartete Informationen, oder Sie sind nicht berechtigt, auf die Metabase zuzugfreifen. Sie müssen ein Mitglied der Administratorgruppe auf dem lokalen Computer sein, um auf die IIS-Metabasis zuzugreifen. Daher können Sie keine lokale IIS-Website erstellen oder öffnen. Wenn Sie Berechtigungen  zum Lesen, Schreiben und Ändern für den Ordner besitzen, in dem sich die Dateien befinden, können Sie eine Dateisystem-Website erstellen, die auf den Ordner zeigt, um mit dem Vorgang fortzufahren.

Weiterlesen

Veröffentlicht unter Allgemein | Kommentare deaktiviert für Profiling bei Visual Studio 2013 und lokalem IIS : Website Metabase Fehler

Kommentare komplett in WordPress ausschalten

Das Abschalten von WordPress-Kommentaren geht eigentlich ganz einfach. Beim Schreiben des Beitrags die Kommentare einfach deaktivieren. Damit ist der Kommentar aber nur bei diesem Beitrag deaktiviert. Schwieriger ist es allerdings für bereits bestehende Beiträge die Kommentare zu deaktivieren und noch schwieriger für Seiten. Weiterlesen

Veröffentlicht unter Allgemein | Kommentare deaktiviert für Kommentare komplett in WordPress ausschalten

jeperti.web.services.pdf veröffentlicht!

application-pdf-2Unter der Rubrik „Downloads und Services“ finden Sie den neuen Webservice zur Verarbeitung von PDF-Dokumenten. Dieser Service ist für Sie frei zu benutzen und lässt sich in Ihre .Net-Projekte integrieren ohne eigene Lösungen zu implementieren.

Klicken Sie hier für mehr Informationen!

Veröffentlicht unter Allgemein | Kommentare deaktiviert für jeperti.web.services.pdf veröffentlicht!

Codeanalyse – Einarbeitung in fremden Code

Es gibt wohl kaum eine schwierigere/nervigere Aufgabe als fremden Code zu warten oder weiterzuentwickeln.
Gerade wenn es dann angeht Incidents/Changes einzuarbeiten kann das zum Topfschlagen im Minenfeld werden.
Also wie am besten die Minen identifizieren? Wie kann ich mich möglichst schnell in den Code einarbeiten? Wie kann möglichst schnell und umfassend ein Code Review entstehen ?

Ein Ansatz um den Code in Zahlen zu fassen sind Code Metriken… Weiterlesen

Veröffentlicht unter .Net, Programmierung | Kommentare deaktiviert für Codeanalyse – Einarbeitung in fremden Code

S/MIME in Outlook einrichten

Um die E-Mail-Verschlüsselung mit S/MIME benutzen zu können benötigt es ein eigenes Zertifikat. Dieses würde sich generell selbst erstellen lassen, würden dann aber von anderen Nutzern nicht akzeptiert. Grund ist, dass das Betriebssystem der Root-Authority vertrauen muss. Weiterlesen

Veröffentlicht unter Security | Kommentare deaktiviert für S/MIME in Outlook einrichten

E-Mail-Verschlüsselung leicht gemacht

E-Mail Verschlüsselung ist grundsätzlich nicht neu. Die grundlegenden Prinzipien gibt es seit langer Zeit. Aber warum verwendet es dann niemand ? Viele meinen dass es zu kompliziert wäre –  aber hier hat sich viel getan. Weiterlesen

Veröffentlicht unter Security | Kommentare deaktiviert für E-Mail-Verschlüsselung leicht gemacht

Windows Update Fehler 80072EFD

Das Upgrade von Windows Server 2008R2 auf Windows Server 2012 R2 hat gut funktioniert. Abgesehen davon, dass bei dem Upgrade auf IIS 8 die Konfiguration nochmals zu erstellen war, hielten die Änderungen sich im Rahmen des Erwarteten (z.B. Software wie Visual SVN Server upgraden).

Was allerdings nicht zu erwarten war, Microsoft Update funktionierte nicht mehr:

windows_update_80072EFD Weiterlesen

Veröffentlicht unter Allgemein, Windows | Kommentare deaktiviert für Windows Update Fehler 80072EFD

Erste Version von jeperti.IrcLogger released!

Seit gerade eben finden Sie unter Downloads und Services die erste Version meiner Bibliothek „jeperti.IrcLogger“ die es einer .Net Anwendung in Kombination mit der Microsoft Enterprise Libarary erlaubt Logging Einträge in einen IRC Channel zu schreiben.

Erfahren Sie hier mehr darüber !

Ich freue mich über Ihr Feedback!

Veröffentlicht unter .Net | Kommentare deaktiviert für Erste Version von jeperti.IrcLogger released!

ORA-01403: No Data Found

Der Fehler ORA-01403: No Data Found (bzw: Keine Daten gefunden) tritt im PLSQL Kontext gerne bei „select into “ – Anweisungen auf.

select nachname into var_nachname where user_id = 1234;

Wird nun die Query ausgeführt und keine Zeile als Ergebnis gefunden, kann die Variable var_nachname nicht gefüllt werden und das Programm steigt an dieser Stelle aus.

Besser also den Fehler abfangen:

begin
   select nachname into var_nachname where user_id = 1234;
exception when no_data_found then:
--Fehlerbehandlungen;
end;

Der Fehler tritt aber auch in Kombination mit Varrays und Tables auf.
Hier ein Beispiel eines Arrays für Umrechnungskurse:

declare
   --Declaration des Typ eines Arrays,dass Numbers als Nutzinhalt speichert und durch Zeichen Adressiert wird
   type fxt is table of number index by varchar2(3);
   fxkurs_collection fxt;

   procedure Init
       for fxc in (select waehrung, kurs
                   from kurstabelle where datum = sysdate)
       loop
          fxkurs_collection(fxc.waehrung) := fxc.kurs;
       end loop;
   end Init;
begin
   -- Schreibt den Kurs von US-Dollar in die Konsole
   DBMS_OUTPUT.PUT_LINE(fxkurs_collection('USD')); 

   -- Liefert No_Data_Found Exception
   DBMS_OUTPUT.PUT_LINE(fxkurs_collection('XXX'));
end;

Auch hier kann man sich natürlich wieder über das „Fangen“ von Exceptions schützen. Um dies allerdings von vornherein zu verhindern, gibt es in PLSQL – genau wie in .Net – Methoden die Prüfen ob ein Schlüssel vorhanden ist:

if (fxkurs_collection.exists(waehrung)) then
   DBMS_OUTPUT.PUT_LINE(fxkurs_collection(waehrung));
else
   DBMS_OUTPUT.PUT_LINE('Kurs zu Waehrung nicht gefunden);
end if;
Veröffentlicht unter Oracle | Kommentare deaktiviert für ORA-01403: No Data Found

ORA-01858: Ein nicht-numerisches Zeichen wurde gefunden….

Heute bewege ich mich in der Programmiersprache PLSQL auf Oracle.

Der Fehler den ich heute hatte ist ganz detailliert dieser :

ORA-01858: Ein nicht numerisches Zeichen wurde gefunden, während ein numerisches Zeichen erwartet wurde

bzw:

ORA-01858: a non-numeric character found where a digit was expected

Der Code dazu war im wesentlichen, ein For-Loop über ein Select-Statement, dass selbst wiederum eine View selektiert. Hier der Code, stark vereinfach und auf das Wesentliche reduziert:

for c1 in (
      select id,
             gebdatum
             nachname,
             vorname,
             anschrift
      from personen_view1
      where datum = sysdate ....
)
loop

      if ( c1.nachname = 'Müller' ) then
          --eigentliche logik ...
      end if;
      ......
end loop;

Die Backtrace Information der Exception hat den Fehler dabei in der ersten zeile  (also for c1…) ausgemacht. Der Fehler trat nicht sofort auf, sondern erst nach ein paar Minuten nach Start der Prozedur.

Grundsätzlich bedeutet die Fehlermeldung ja, dass die Datenbank eine Zahl erwartet hat, aber Buchstaben gefunden hat. Klassischer Konvertierungsfehler so mein erster Gedanke.

Mein erster Ansatz war also die View und deren Definition zu untersuchen : Sind alle Datentypen richtig erkannt ? Ist mir in der Prozedur ein Fehler unterlaufen, sodass ich mit einem Char-Feld rechne ? Rechne ich mit Datümern ? Sind in der View alle Konvertierungen sauber ? Wird mit Null-Werten richtig umgegangen?
Die View war diesbezüglich in Ordnung. Ein einfaches Select-Statement lief sauber durch und lieferte keine Indizien.

Also musste der Fehler in der Prozedur selbst liegen. Also habe ich sukzessive den ganzen Code auskommentiert und bin bei eben obiger Vereinfachung geblieben. Der Fehler war also eingegrent und konnte schnell und einfach nachgestellt werden.

Mit folgender Abänderung lief die Prozedur fehlerfrei aber mit falschen Ergebnissen durch:

for c1 in (
      select id,
             gebdatum
             nachname,
             vorname,
             anschrift
      from personen_view1
      where datum = sysdate ....
)
loop
      -- To Char Konvertierung um Fehler einzugrenzen
      if (to_char(c1.nachname) = 'Müller' ) then
          --eigentliche logik ...
      end if;
      ......
end loop;

Die fehlerhafte Typkonvertierung musste also nach der View, aber vor diesem ersten If passieren. Ein weiteres Indiz um der Ursache näher zu kommen war den Select ohne explizite Spaltenauflistung, sondern nur mit „*“ auszuführen. Auch hier lief die Prozedur fehlerfrei.

Des Rätsels Lösung befindet sich in der Zeile mit der Spaltenauflistung für Gebdatum. Es fehlt hier ein Komma (Ende Zeile 03). Dadurch wird die darauffolgende Spalte „Name“ nicht zur Spaltenauflistung der Selects, sondern nur  zum Alias der Spalte „Gebdatum“. Der Vergleich auf den Nachnamen Müller vergleicht nun also nicht „Müller“ mit der Spalte „nachname“ der View sondern mit dem „gebdatum“, dass durch nur anders heisst. Insgesamt also ein dummer Copy & Paste Fehler der im größeren Aufbau nur schwer zu finden war.

Aber warum trat der Fehler erst nach ein paar Minuten auf ? Dieser Fehler hätte sofort und beim ersten Datensatz auffallen müssen. Mit Blick auf den Explain Plan des SQL-Statements bzw. der View wird klar, dass das Ergebnis über einen Hash-Join gebildet wird. Diese Form des Joins hat die Auswirkung, dass der erste Aufbau des Cursors relativ lange dauert (besagte Minuten) , beim Iterieren über die Datensätze aber dafür schneller Daten liefern als mit Nested-Loops. Der Fehler ist also wirklich auch schon beim ersten Fehler aufgetaucht, weil es eben Minuten dauerte um den ersten Satz zu liefern.

Veröffentlicht unter Datenbanken | Kommentare deaktiviert für ORA-01858: Ein nicht-numerisches Zeichen wurde gefunden….