Meine erste Anwendung mit ASP.NET Core 1.0

Seit gestern heißt ASP.NET 5 nicht mehr so, sondern anders, nämlich ASP.NET Core 1.0.

Zufällig auch gestern habe ich meine erste eigene ASP.NET-Core-1.0-Anwendung entwickelt:

Techmeme River

Techmeme River

Das ist ein simples Screen-Scraping-Tool, dass ausgewählte Inhalte von Techmeme in einer responsive Ansicht darstellt, also sowohl für Desktop als auch für Mobilgeräte.

Ich bitte um freundliche Beachtung von tm.uwe.co.

ASP.NET MVC, Debugging von URL-Routings

Zurzeit arbeite ich einiges mit ASP.NET MVC 4 und erfahre dadurch die Höhen und Tiefen des URL-Routings über MapRoute-Aufrufe.

Dabei bin ich auf ein inzwischen auch schon einige Jahre altes kleines Tool gestoßen, dass mir hervorragend hilft, URL-Routing-Tabellen zu debuggen:

ASP.NET Routing Debugger

Das Tool, auch als NuGet-Paket „routedebugger“ verfügbar, schreibt auf jede Seite in die Fußzeile, welche Routings es gibt und welches zutreffend für den Aufruf der Seite war.

Anders als im Artikel beschrieben, muss mit dem NuGet-Paket nichts mehr manuell konfiguriert werden, es ist alles automatisch konfiguriert, sobald Ihr das Paket installiert habt.

Steuern könnt Ihr die Ausgabe in der Fußzeile über einen appSettings-Schalter in der Web.Config-Datei:

Super gemacht und super einfach in der Anwendung.

Was mir jetzt noch fehlt, ist ein Debugger, der mir sagt, welche Route verwendet wird, beim Generieren von Links über (z.B.) @Url.Action oder @Html.ActionLink. Wobei es dort ja noch die expliziten Funktionen wie z.B. @Url.RouteUrl gibt, um gezielt eine Route für die Link-Generierung anzusprechen.

Fehlermeldung mit „DotNetOpenAuth.Core“ in ASP.NET MVC beseitigen

Eine neue Website mit ASP.NET MVC 4, frisch auf einen Server publiziert, lieferte die Fehlermeldung:

Die Datei oder Assembly „DotNetOpenAuth.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246“ oder eine Abhängigkeit davon wurde nicht gefunden. Die gefundene Manifestdefinition der Assembly stimmt nicht mit dem Assemblyverweis überein. (Ausnahme von HRESULT: 0x80131040)

Im Englischen klingt das ungefähr so:

Could not load file or assembly ‚DotNetOpenAuth.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246‘ or one of its dependencies. The located assembly’s manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Nach viel Suchen, fand ich schließlich die Lösung:

Da ich dieses „DotNetOpenAuth.Core“ via NuGet installiert hatte, wurde in meiner lokalen Web.config-Datei automatisch Einträge ergänzt. Diese Einträge haben im öffentlichen Web auf dem Webserver noch gefehlt.

Hier der komplette Ausschnitt:

Sobald ich das ergänzt hatte, war der Fehler weg.

Ankommende Suchanfragen:

  • Es wird angenommen dass der Assemblyverweis System Web Mvc Version=4 0 0 0 Culture=neutral PublicKeyToken=31bf3856ad364e35 mit System Web Mvc Version=4 0 0 1 Culture=neutral PublicKeyToken=31bf3856ad364e35 übereinstimmt
  • ist im aktuellen kONTEXt nicht vorhanden mvc
  • DotNetOpenAuth Core
  • manifest definition der assembly stimmt nicht mit dem assemblyverweis überein

Texte in JavaScript-Dateien in ASP.NET übersetzen

Der Artikel „Localize text in JavaScript files in ASP.NET“ hat eine hervorragende Lösung um Texte in JavaScript-Dateien (und auch in CSS-Dateien) zu übersetzen.

Das klappt sowohl mit ASP.NET-Website-Projekten, als auch mit ASP.NET-Web-Applikations-Projekten (also dem kompilierten).

Bis auf einen Fall, der mir heute passiert ist. Da kam immer eine Exception, dass er die Ressourcen für die aktuelle Culture nicht findet.

Die Lösung sah dann so aus, dass ich eine Funktion geändert habe.

Alt:

Neu:

D.h. ich habe den Zugriff über eine Klasse in einen Zugriff über „GetGlobalResourceObject“ umgewandelt, der erst zur Laufzeit versucht das aufzulösen.

Fehlermeldung „CS0103: Der Name ‚ViewBag‘ ist im aktuellen Kontext nicht vorhanden“ bei ASP.NET MVC 4 lösen

Heute habe ich bei einem neu deployten Projekt mit ASP.NET 4.5 und MVC 4 folgende Fehlermeldung erhalten:

CS0103: Der Name ‚ViewBag‘ ist im aktuellen Kontext nicht vorhanden
CS0103: The name ‚ViewBag‘ does not exist in the current context

Eine ähnliche Meldung lautet:

CS0103: Der Name ‚model‘ ist im aktuellen Kontext nicht vorhanden
CS0103: The name ‚model‘ does not exist in the current context

Lokal lief alles, auf dem Produktivserver kam die Fehlermeldung. Ich habe lange gesucht, bis ich die funktionierende Lösung gefunden habe.

Lösung

Die Lösung war im Endeffekt, dass es zwei Web.Config-Dateien gibt:

Diese im Views-Ordner hat bei mir gefehlt. Sobald ich diese hinzugefügt und entsprechend gefüllt hatte, hat alles funktioniert.

Ankommende Suchanfragen:

  • CS0103 C# Der Name at ist im aktuellen Kontext nicht vorhanden
  • CS0103 C# Der Name _helpers ist im aktuellen Kontext nicht vorhanden
  • CS0103 C# Der Name InitializeComponent ist im aktuellen Kontext nicht vorhanden
  • CS0103 C# Der Name Resource ist im aktuellen Kontext nicht vorhanden
  • Der Name ViewBag ist im aktuellen Kontext nicht vorhanden
  • CS0103 C#
  • CS0103 C# Der Name Addition ist im aktuellen Kontext nicht vorhanden
  • CS0103 C# Der Name comboBox1 ist im aktuellen Kontext nicht vorhanden
  • CS0103 C# Der Name LoadApplication ist im aktuellen Kontext nicht vorhanden
  • CS0103 C# Der Name masterPage ist im aktuellen Kontext nicht vorhanden
  • CS0103 C# Der Name name ist im aktuellen Kontext nicht vorhanden
  • CS0103 C# Der Name openOrCreateDatabase ist im aktuellen Kontext nicht vorhanden
  • CS0103 C# Der Name rule ist im aktuellen Kontext nicht vorhanden
  • CS0103 C# Der Name webBrowser ist im aktuellen Kontext nicht vorhanden
  • CS0103 C# Der Name WebClient ist im aktuellen Kontext nicht vorhanden

CryptographicException bei Verwendung von Oracle.ManagedDataAccess lösen

Gestern hatte ein Kollege beim Aufsetzen einer Website ASP.NET MVC 4 auf einem IIS unter Windows Server 2008 R2 eine Fehlermeldung:

Zunächst war es eine Herausforderung, statt den „normalen“ Oracle.DataAccess-Klassen die Oracle.ManagedDataAccess-Klassen zum Laufen zu bringen. Hier haben uns zwei Artikel geholfen:

Wir haben dann zum Lösen des eigentlichen Fehlers lange rumgesucht, viel ausprobiert und schließlich beim Weblog-Artikel „SOLVED: Windows Identity Foundation – “The system cannot find the file specified”“ fündig geworden.

Die Lösung bestand dann schlicht darin, im Anwendungspool (App Pool) für die Anwendung die Option „Benutzerprofil laden“ auf „True“ zu stellen:

IIS App Pool - Benutzerprofil laden

Danach lief alles wie gewünscht.

Zugriff auf den ASP.NET Development Server von einem anderen Rechner

Der ASP.NET Development Server ist ein Webserver, der mit Visual Studio .NET 2008, 2010 und 2012 mitgeliefert wird.

Er kann standardmäßig nur lokale Verbindungen entgegennehmen, also beispielsweise keine Verbindungen von einem anderen Rechner im Netzwerk und auch nicht von einem VMware-Rechner, der mit VMware Workstation auf demselben Rechner läuft wie der Webserver selbst.

Abhilfe

Um trotzdem von einem externen Rechner (im selben Netzwerk, logisch) drauf zugreifen zu können habe ich nach kurzer Recherche diese Antwort auf Stack Overflow gefunden, die mir den richtigen Weg gewiesen hat:

Mithilfe des Programms „SPI Port Forward“ (die Herstellerseite ist inzwischen tot, die Download-Portale bringen fast immer so geschissene Download-Tools mit, die das System zumüllen, also aufpassen!) könnt Ihr lokale Ports weiterleiten.

Läuft z.B. Euer lokaler ASP.NET Development Server auf Port 59429, so könnt Ihr den Port-Forwarder z.B. wie folgt einrichten:

SPI Port Forward

Das Beispiel bedeutet, dass Ihr den lokalen Port 59429 von extern über Port 8080 erreichbar macht.

In meinem Fall hatte ich zuerst probiert via IP-Adresse drauf zuzugreifen, das hat leider nicht funktioniert, es kam keine Antwort. Erst als ich über den Namen meines Rechners drauf zugegriffen hatte, ging es. Also:

  • Erfolgreich: http://uwekeim-pc:8080/intranet/page.aspx
  • Fehlgeschlagen: http://192.168.147.70:8080/intranet/page.aspx

Ich habe mit Visual Studio .NET 2010 unter Windows 7 gearbeitet.

Stellenangebot: Junior-.NET-Softwareentwickler (m/w)

Wir suchen sympathische Menschen, die gemeinsam in unserem Team etwas bewegen und sich selbst weiterentwickeln möchten.

Die Zeta Software GmbH entwickelt Produkte und Softwarelösungen für nationale und internationale Kunden.

Zur Unterstützung unseres Entwicklungs-Teams suchen wir ab sofort Absolventen oder Berufseinsteiger aus den Bereichen Informatik / Wirtschaftsinformatik für unseren Standort in 73037 Göppingen bei Stuttgart.

Ihre Aufgaben:

  • Sie konzipieren moderne Web- und Mobil-Anwendungen selbst sowie im Dialog mit den Fachabteilungen unserer Kunden
  • Sie erweitern gemeinsam im Team unsere bestehenden Lösungen um neue Funktionen und wirken wesentlich bei der Weiterentwicklung und dem Erfolg unserer Software mit

Wir bieten Ihnen:

  • Erstklassige und individuelle Einarbeitung: Ihre Kollegen stehen Ihnen jederzeit unterstützend zur Seite
  • Arbeit an Projekten und Produkten, die von vielen Anwendern eingesetzt werden
  • Attraktiver Arbeitsplatz mit modernster Ausstattung
  • Ein sympathisches und hochmotiviertes Team, das einen respekt- und vertrauensvollen Umgang pflegt
  • Viel Gestaltungsspielraum und die Möglichkeit neue Technologien kennen zu lernen

Was Sie mitbringen:

  • Abgeschlossenes Hochschulstudium der Informatik oder einer themenverwandten Fachrichtung oder eine Ausbildung zum Informatiker
  • Kenntnisse in den Programmiersprachen, C++, C#, Java, Objective-C oder PHP bzw. Kenntnisse in der Entwicklung von Webanwendungen oder mobilen Anwendungen
  • Idealerweise erste praktische Erfahrungen durch Praktika oder private Projekte
  • Strukturierte und anwenderorientierte Arbeitsweise, Lernbereitschaft und Teamgeist

Bitte senden Sie uns Ihre Bewerbungsunterlagen inklusive Angabe Ihres frühestmöglichen Eintrittstermins und Ihrer Gehaltsvorstellung per E-Mail an jobs@zeta-software.de

Zeta Software GmbH
Manfred-Wörner-Straße 115
73037 Göppingen
Baden-Württemberg
Deutschland

Fehlermeldung „Column does not belong to table“

Bei mir trat/tritt von Zeit-zu-Zeit die Fehlermeldung „Column does not belong to table“ auf, jeweils mit einer angegebenen Spalte, z.B.

Column ‚TestPlanID‘ does not belong to table

Oder

Column ‚ParentID‘ does not belong to table

Bzw. auf Deutsch

Spalte ‚RunnableTestCaseID‘ gehört nicht zu Tabelle

Da das nur teilweise auftritt und nur bei manchen Kunden und nur wenn viele SQL-Anfragen hintereinander ausgeführt werden, hat mir dieser Blogpost hier geholfen.

Der Autor dort geht davon aus, dass er ggf. Connections nicht rechtzeitig schließt. Als er das beseitigt hatte und der Fehler immer noch auftrat, hat er folgende Schlussfolgerungen/Aktionen daraus gezogen:

  1. Use „iisreset“ command every time you stop the IIS server.
  2. Walk through your code and make sure you are closing connection properly.
  3. Use „Connection Lifetime“ property of connection pool if required.
  4. Try to use ClearAllPools/ClearPool in appropriate application event.

Bei mir hat das teilweise geholfen, ggf. ist das ja doch irgend ein .NET-Bug, der irgendwann mal mit den neuesten Treibern für Microsoft SQL Server beseitigt sind.

Ergänzung 1:

Gerade heute bekomme ich wieder eine ähnliche Meldung bei einem Oracle-Projekt:

Column „FACH“ does not belong to table

Ich deute das so, dass das auch beim Oracle-Treiber so ein Issue ist. Es handelt sich hier um eine ASP.NET-4.0-Webanwendung. Andere sprechen auch darüber, dass es bei Ihnen auch bei Oracle auftritt. Vermutlich also ein Issue in ADO.NET. Einer schreibt:

We had this exact problem and we solved it.

Using static (C#) or shared (VB) .Net data classes on a multi-processor server will cause this error. The data class and its objects, e.g. DataTable, get resused across threads for some reason. So when when two requests come in at the same time, the second request overwrote the DataTable object variable with its own results, causing the first request to fail when it went looking for its tables, columns, etc.

This problem only occurred on multi-processor servers and went away when we declared our data classes without static or shared.

Wobei ich ihm das nicht ganz glaube. der Oracle provider hat auch eine Funktion ClearAllPools/ClearPool, diese werde ich jetzt mal aufrufen.

Ergänzung 2:

Den Fehler konnte ich jetzt beim Oracle erfolgreich beseitigen, indem ich meinen (eigenen) Cache deaktiviert habe. Eventuell hängt es mit dem Background-Cache-Aufräumen zusammen oder mit zu vielen Elementen im Cache.

Ergänzung 3 (2013-04-22):

Hatte jetzt erneut so einen Fall, den ich durch Cache-Deaktivieren lösen konnte.

Eventuell ist es ja sinnvoll, wenn eine DataTable aus dem Cache geholt wird, diese zu clonen, so dass nur die gleiche, nicht jedoch dieselbe DataTable genutzt wird und es so nicht zu Concurrency-Issues kommen kann. (Habe das jetzt probiert, hat in meinen Tests keine Änderung gebracht, leider).

(Keywords: spalte gehört nicht zu tabelle)

Ankommende Suchanfragen:

  • fileref gehört nicht zur tabelle sharepoint
  • C# : Spalte gehört nicht zu Tabelle
  • c# Spalte gehört nicht zu Tabelle
  • crystal reports Spalte gehört nicht zu tabelle
  • Spalte gehört nicht zu Tabelle ado net
  • spalte gehört nicht zur tabelle c#