Subscribe: DotNetGerman Bloggers
Added By: Feedage Forager Feedage Grade B rated
Language: German
angular  app  application  authentication  azure  client  core  die  links icio  net core  net  new  server  token  via  web 
Rate this Feed
Rate this feedRate this feedRate this feedRate this feedRate this feed
Rate this feed 1 starRate this feed 2 starRate this feed 3 starRate this feed 4 starRate this feed 5 star

Comments (0)

Feed Details and Statistics Feed Statistics
Preview: DotNetGerman Bloggers

DotNetGerman Bloggers

Alle Blogs von

Copyright: Copyright 2004-2014

Links for 2016-09-23 []

Sat, 24 Sep 2016 00:00:00 -0700

  • Troy Hunt: Azure Functions in practice
    I wrote recently about how Have I been pwned (HIBP) had an API rate limit introduced and then brought forward which was in part a response to large volumes of requests against the API. via Pocket

Code-Analyse und OmniSharp – dotnetpro Artikel zum Download

Fri, 23 Sep 2016 06:30:47 Z

In der aktuellen Ausgabe der dotnetpro (10/2016) sind zwei Artikel von der AIT enthalten. Im Artikel „Code-Analyse für jedermann – Auch kostenlose Tools lassen sich in den Build-Prozess einbinden“ finden Sie Informationen zur Erweiterung der Code-Auswertung jenseits von ReSharper. Bei „OmniSharp – Wenn die Programmiersprache die Wahl des Editors nicht mehr beeinflusst“ erhalten Sie einen […]

Links for 2016-09-22 []

Fri, 23 Sep 2016 00:00:00 -0700


Wir ziehen um!!

Thu, 22 Sep 2016 10:20:02 +0200

Die Codefest Seite hat uns über viele Jahre begleitet und ist uns richtig ans Herz gewachsen. Irgendwann wird es dann aber doch Zeit für einen Tapetenwechsel. Daher:

  • Adieu Blogengine .NET!
  • Hello Wordpess!!

Unsere neue Adresse wird die alte sein. Derzeit haben wir allerdings noch einen Parallelbetrieb.

Bis daher der redirect eingerichtet ist und die automatische Weiterleitung funktioniert besucht uns doch schon jetzt auf:



Links for 2016-09-21 []

Thu, 22 Sep 2016 00:00:00 -0700


Authentication in ASP.​NET Core for your Web API and Angular2

Thu, 22 Sep 2016 00:00:00 Z

Authentication in a single page application is a bit more special, if you just know the traditional ASP.NET way. To imagine that the app is a completely independent app like a mobile app helps. Token based authentication is the best solution for this kind of apps. In this post I'm going to try to describe a high level overview and to show a simple solution. Intro As written in my last posts about Angular2 and ASP.NET Core, I reduced ASP.NET Core to just a HTTP Service, to provide JSON based data to an Angular2 client. Some of my readers, asked me about how the Authentication is done in that case. I don't use any server generated log-in page, registration page or something like this. So the ASP.NET Core part only provides the web API and the static files for the client application. There are many ways to protect your application out there. The simplest one is using an Azure Active Directory. You could also setup a separate authentication server, using IdentityServer4, to manage the users, roles and to provide a token based authentication. And that's the key word: A Token Based Authentication is the solution for that case. With the token bases authentication, the client (the web client, the mobile app, and so on) gets a string based encrypted token after a successful log-in. The token also contains some user info and an info about how long the token will be valid. This token needs to be stored on the client side and needs to be submitted to the server every time you request a resource. Usually you use a HTTP header to submit that token. If the token is not longer valid you need to perform a new log-in. In one of our smaller projects, didn't set-up a different authentication server and we didn't use Azure AD, because we needed a fast and cheap solution. Cheap from the customers perspective. The Angular2 part On the client side we used angular2-jwt, which is a Angular2 module that handles authentication tokens. It checks the validity, reads meta information out of it and so on. It also provides a wrapper around the Angular2 HTTP service. With this wrapper you are able to automatically pass that token via a HTTP header back to the server on every single request. The work flow is like this. If the token is not valid or doesn't exist on the client, the user gets redirected to the log-in route The user enters his credentials and presses the log-in button The date gets posted to the server where a special middle-ware handles that request The user gets authenticated on the server side The token, including a validation date and some meta date, gets created The token gets returned back to the client the client stores the token in the local storage, cookie or whatever, to use it on every new request. The angular2-jwt does the most magic on the client for us. We just need to use it, to check the availability and the validity, every time we want to do a request to the server or every time we change the view. This is a small example (copied from the Github readme) about how the HTTP wrapper is used in Angular2: import { AuthHttp, AuthConfig, AUTH_PROVIDERS } from 'angular2-jwt'; ... class App { thing: string; constructor(public authHttp: AuthHttp) {} getThing() { // this uses authHttp, instead of http this.authHttp.get('') .subscribe( data => this.thing = data, err => console.log(err), () => console.log('Request Complete') ); } } More samples and details can be found directly on github and there is also a detailed blog post about using angular2-jwt: The ASP.NET part On the server side we also use a, separate open source project, called SimpleTokenProvider. This is really a pretty simple solution to authenticate the users, using his credentials and to create and provide the token. [...]

Neues E-Book zu Entity Framework Core

Wed, 21 Sep 2016 08:08:00 +0200

Das Buch, das die fertige Version 1.0 von Microsoft neuem OR-Mapper beschreibt, ist in einer ersten Grundversion mit 100 Seiten erschienen.

Links for 2016-09-20 []

Wed, 21 Sep 2016 00:00:00 -0700


API Summit am 22.11. & 23.11. 2016 in Berlin

Tue, 20 Sep 2016 16:20:40 +0200


Vom 22. bis 23. November 2016 präsentiert die Entwickler Akademie in Kooperation mit dem Entwickler Magazin zum ersten Mal den API Summit in Berlin. Die neue Konferenz für Web APIs mit Java, .NET und Node bietet mit mehr als 26 Sessions und insgesamt 18 Speakern umfassendes Know-how zu RESTful Web APIs.

Plattformunabhängige Best Practices und Standards am ersten Tag werden mit Sessions über die Implementierung und den Betrieb von Web APIs am zweiten Tag kombiniert.

See you there…


Links for 2016-09-19 []

Tue, 20 Sep 2016 00:00:00 -0700


ALMDays goes Technical Summit

Mon, 19 Sep 2016 08:00:23 Z

Es gibt eine Änderung für Euren Konferenz-Kalender zu beachten. Die ALMDays, so wie Ihr sie kanntet, wird es in Zukunft nicht mehr geben. Aber das ist kein Grund, traurig zu sein, denn es gibt etwas noch Besseres für Euch. ALMDays goes Technical … Weiterlesen

ASP.​NET Core and Angular2 using dotnet CLI and Visual Studio Code

Mon, 19 Sep 2016 00:00:00 Z

This is another post about ASP.NET Core and Angular2. This time I use a cleaner and more light weight way to host a Angular2 App inside an ASP.NET Core Web. I'm going to use dotnet CLI and Visual Studio Code. A few days ago there was an update for ASP.NET Core announced. This is not a big one, but a important run-time update. You should install it, if you already use ASP.NET Core 1.0. If you install it the first time (loaded from, the update is already included. Also since a few days, the final version of Angular2 was announced. So, we will use Angular 2.0.0 and ASP.NET Core 1.0.1. This post is structured into nine steps: #1 Create the ASP.NET Core web The first step is to create the ASP.NET Core web application this is the easiest thing using the dotnet CLI. After downloading it from and installing it, you are directly able to use it. Choose any console you like and g to your working folder. Type the following line to create a new web application inside that working folder: > dotnet new -t web If you used the dotnet CLI for the first time it will take a few seconds. After the first time it is pretty fast. Now you have a complete ASP.NET Core quick-start application. Almost the same thing you get, if you create a new application in Visual Studio 2015. Now we need to restore the NuGet packages, which contains all the .NET Core and ASP.NET dependencies > dotnet restore This takes a few seconds, depending in the amount of packages or on the internet connection. If this is done, type dotnet run to start the app. You will see an URL in the console. Copy this URL and paste it into the browsers address bar. As you can see, you just need three console commands to create a working ASP.NET application. #2 Setup the ASP.NET Core web To support a Angular2 single page application we need to prepare the Startup.cs a little bit. Because we don't want to use MVC, but just the web API, we need to remove the configured default route. To support Angular routing, we need to handle 404 errors: In case a requested resource was not found on the server, it could be a Angular route. This means we should redirect request, which results in a error 404, to the index.html. We need to create this file in the wwwroot folder later on. The Configure method in the Startup.cs now looks like this: public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { loggerFactory.AddConsole(Configuration.GetSection("Logging")); loggerFactory.AddDebug(); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseDatabaseErrorPage(); app.UseBrowserLink(); } else { app.UseExceptionHandler("/Home/Error"); } app.Use(async (context, next) => { await next(); if (context.Response.StatusCode == 404 && !Path.HasExtension(context.Request.Path.Value)) { context.Request.Path = "/index.html"; await next(); } }); app.UseStaticFiles(); app.UseIdentity(); app.UseMvc(); } #3 The front-end dependencies To develop the front-end with Angular 2, we need some tools, like TypeScript, Webpack and NPM. We use TypeScript to write the client code, which will be transpiled to JavaScript using Webpack. We use Webpack with a simple Webpack configuration to transpile the TypeScript code to JavaScript and to copy the dependencies to the wwwroot folder. NPM is used to get all that stuff, including Angular itself, to the development machine. We need to configure the package.json a little bit. The easiest way is to use the same configuration as in the ANgular2 quick-start tutorial on You need to h[...]

Links for 2016-09-18 []

Mon, 19 Sep 2016 00:00:00 -0700

  • Self-contained .NET Core Applications - Scott Hanselman
    Just in case you missed it, .NET is all open source now and .NET Core is a free, open source, cross-platform framework that you can download and start with in <10 minutes. You can get it on Mac, Windows, and a half-dozen Unixes at via Pocket
  • John Papa: Introducing Angular Modules - Feature Modules
    The @NgModule is a new decorator that has recently been added in Angular 2. NgModule defines an Angular Module, which (from the official docs) are defined as "Angular Modules help organize an application into cohesive blocks of functionality." via Pocket

Links for 2016-09-17 []

Sun, 18 Sep 2016 00:00:00 -0700


Angular 2 AOT Compilation and Tree Shaking with Webpack2 and/or Rollup: Step by Step

Sun, 18 Sep 2016 00:00:00 +0100

In the last days, I've adapted my Angular 2 sample for ahead-of-time (AOT) compilation with the template-compiler. Here I'm documenting the necessary steps for such an undertaking as well as my learnings towards this. The whole sample can be found here. I'm subdividing this writing into two parts: Part 1: Angular 2 AOT Compiler and Tree Shaking with Webpack2 and/or Rollup (this one) Part 2: Angular 2 AOT Compiler and Lazy Loading (coming up) I want to explicitly thank Wassim Chegham and Minko Gechev for providing great information about this topic. They really helped me getting started with it. Another valuable source for this topic is the cookbook for AOT and Tree Shaking within the official documentation of Angular 2. Refactoring As AOT compilation does not allow for dynamic references, using require is not possible. Currently, there are also problems with using to work with relative paths for templates or styles. However, thanks to the angular2-template-loader for Webpack, which lines-in the templates and styles for components, we can use relative references in JIT mode anyway. In addition to that, the AOT compiler also supports relative paths: @Component({ selector: 'flug-suchen', templateUrl: './flug-suchen.component.html', styleUrls: ['./flug-suchen.component.css'], }) export class FlugSuchenComponent { [...] } Packages In order to work with AOT compilation as well as with Webpack2 and Rollup, one has to install several packages. The next listing contains the dev-dependencies I've used for this: "webpack": "^2.1.0-beta.21", "angular2-template-loader": "^0.5.0", "awesome-typescript-loader": "^2.2.4", "file-loader": "^0.8.5", "html-loader": "^0.4.3", "raw-loader": "^0.5.1", "rollup": "^0.35.11", "rollup-plugin-commonjs": "^4.1.0", "rollup-plugin-node-globals": "^1.0.7", "rollup-plugin-node-resolve": "^2.0.0", "rollup-plugin-uglify": "^1.0.1", We also need the compiler-cli and plattform-server as a dependency: "@angular/compiler-cli": "^0.6.2", "@angular/platform-server": "^2.0.0", And then, we also need TypeScript 2 and some typings as part of our dev-dependencies: "typescript": "^2.0.2", "@types/es6-shim": "0.0.31", "@types/jasmine": "^2.2.33", "@types/node": "^6.0.38", "@types/protractor": "^1.5.18", tsconfig.json The AOT compiler uses its own tsconfig.json-file. According to the docs, I've named it tsconfig.aot.json: { "compilerOptions": { "target": "es5", "module": "es2015", "moduleResolution": "node", "declaration": false, "removeComments": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, "sourceMap": true, "pretty": true, "allowUnreachableCode": false, "allowUnusedLabels": false, "noImplicitAny": false, "noImplicitReturns": false, "noImplicitUseStrict": false, "noFallthroughCasesInSwitch": true, "outDir": "./dist/unbundled-aot", "types": [ "es6-shim", "node", "jasmine" ] }, "exclude": [ "node_modules", "dist" ], "angularCompilerOptions": { "genDir": "aot", "skipMetadataEmit" : true } } Here, it's important to use the target es5 together with the module-format es2015. The latter one allows for tree shaking with Rollup. The property genDir within angularCompilerOptions defines, where the template compiler should place files it generated out of HTML files. The tsconfig.json that is used with the traditional TypeScript Compiler looks like this: { "compilerOptions": { "module": "commonjs", "target": "es5", "outDir": "dist/unbundled", "sourceMap": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, "moduleR[...]

Bug beim TFS-Checkin in Visual Studio: "Value was either too large or too small for a UInt32".

Thu, 15 Sep 2016 16:52:00 +0200

Ursache für diese Fehlermeldung sind ungespeicherte Dateien in der Entwicklungsumgebung.

Ich kenne was, was Du nicht kennst: Geolocation API

Mon, 12 Sep 2016 07:30:00 +0200

Für zahlreiche Anwendungen kann es interessant sein, den Standort des Anwenders zu ermitteln. Während das im Webbrowser ein Leichtes ist, sieht es auf dem Server deutlich schwieriger aus …

LEGO Mindstorms EV3: Kostenlose Lehrerschulungen

Mon, 12 Sep 2016 06:30:58 Z

Ab dem September 2016 gibt es in ganz Deutschland zahlreiche Lehrerschulungen zum LEGO Mindstorms Education EV3. Die Fortbildungen richten sich an Lehrer und Lehrerinnen weiterführender Schulen, die MINT-Fächer unterrichten. Eine umfangreiche Liste aller Schulungsorte inklusive Zeiten gibt es auf der LEGO Education Webseite. Die Buchungen erfolgen über  XING Events. Die Anmeldung für die Schulungen läuft bereits […]

RESTier auf der Zielgeraden zu Version 1.0

Fri, 09 Sep 2016 13:37:00 +0200

Microsofts neue Bibliothek für die einfache Implementierung von OData-Diensten hat einen Sprung von Version 0.6 auf Version 1.0 Beta gemacht.

Vorlage zum Antworten bei unberechtigten Mahnungen

Thu, 08 Sep 2016 13:03:43 Z

Kürzlich erhielt meine Oma ein Mahnschreiben der Sirius Inkasso GmbH, vertreten durch die Fachanwälte Wagner, Pauls und Kalb, welche eine Forderung der Communication Services Tele2 GmbH eintreiben wollten. Die Mahnung war in ihrem Fall völlig ungerechtfertigt und höchst fragwürdig, vermutlich Teil einer größeren, breit angelegten Abmahnwelle:   .   Ich habe mir daraufhin die Mühe gemacht und entsprechende Informationen …(image)

Prozessanpassungen in Visual Studio Team Services – Work Item Types

Wed, 07 Sep 2016 07:10:59 Z

Jetzt ist es also soweit – Visual Studio Team Services erlaubt die Erstellung eigener Work Item Typen. Ein weiterer wichtiger Schritt, um den Prozess-Workflow effektiv anpassen zu können. Ich habe mir für Euch das Vorgehen schon mal näher angesehen. Wie … Weiterlesen

Windows 10 Anniversary Update erzwingen

Tue, 06 Sep 2016 13:18:00 +0200

Mit einem kleinen Hilfsprogramm von Microsoft kann man die sofortige Aktualisierung von Windows 10 herbeiführen, auch wenn in den Einstellungen kein Update angezeigt wird.

Lazy Loading von Modulen mit Angular 2, dem neuen Router und webpack

Sat, 03 Sep 2016 00:00:00 +0100

Um die Ladezeiten einer Single Page Application (SPA) zu optimieren, bietet es sich an, einzelne Bestandteile nicht sofort sondern erst bei Bedarf zu laden. Seit RC 5 unterstützt Angular 2 dieses Vorgehen, welches auch als Lazy Loading bekannt ist. Dazu kommen die neu eingeführten Module, mit der eine Anwendung strukturiert und in mehrere wiederverwendbare Einheiten aufgesplittet werden kann, zum Einsatz. Mit diesem Beitrag veranschauliche ich den Umgang mit Modulen und Lazy Loading anhand eines Beispiels, welches zum Bundling webpack verwendet. Das vollständige Beispiel findet sich hier. Wer mit den hier beschriebenen Techniken ein eigenes Beispiel erstellen möchte, findet für den Start auf den GitHub-Seiten des Angular-2-Teams ein sehr einfaches Seed-Projekt, welches auch webpack nutzt. Beispiel Das hier verwendete Beispiel bietet über den Router die Menüpunkte Home, Login und Flug Buchen an: Die ersten beiden Menüpunkte stehen ab dem Start der Anwendung zur Verfügung. Die Anwendungsteile für den Menüpunkt Flug Buchen lädt die Anwendung erst bei Bedarf nach: Hierzu wurde die Anwendung auf vier Module aufgeteilt: Das AppModul beinhaltet die Root-Component, welche die gesamte Anwendung repräsentiert und beim Bootstrapping von Angular 2 erzeugt wird. Solche Module nennt man deswegen auch Root-Module. Es referenziert das HomeModule mit den Komponenten für die ersten beiden Menübefehle. Daneben lädt es über den Router beim ersten Aufruf des Befehls Flug Buchen das FlugModule in die Ausführungsumgebung. Sowohl HomeModule als auch FlugModule verweisen auf das SharedModule, welches allgemeine Komponenten und Services beherbergt. Allgemeiner AuthService im SharedModule Das SharedModule bietet unter anderem einen AuthService an. Dieser simuliert das An- und Abmelden des Benutzers und hält dessen Namen und Stadt vor. Wie das nachfolgende Listing zeigt, handelt es sich dabei aus Gründen der Vereinfachung um eine Implementierung für äußerst ehrliche Benutzer: @Injectable() export class AuthService { isLoggedIn: boolean = false; userName: string = null; city: string = "Wien"; login() { this.isLoggedIn = true; this.userName = "Max"; = "Graz"; } logout() { this.isLoggedIn = false; this.userName = null; = "Wien"; } } Wichtig für die weitere Betrachtung des Beispiels ist, dass der Service bei einem anonymen Benutzer die Standardwert Wien als Standardwert annimmt, während der verwendete Demo-Benutzer zur Stadt Graz zugeordnet ist. Das SharedModule importiert das CommonModule sowie das FormsModule. Ersteres beinhaltet allgemeine Direktiven, wie ngIf, ngFor oder ngStyle und letzteres fügt Unterstützung für die Arbeit mit Formularen hinzu: @NgModule({ imports: [ CommonModule, FormsModule ], declarations: [ OrtValidatorDirective, OrtAsyncValidatorDirective, DateComponent, OrtPipe ], exports: [ OrtValidatorDirective, OrtAsyncValidatorDirective, DateComponent, OrtPipe ], providers: [] }) export class SharedModule { static forRoot(): ModuleWithProviders { return { ngModule: SharedModule, providers: [AuthService] } } } Der Abschnitt declarations legt die Inhalte des Moduls fest. Dabei kann es sich um Direktiven, Komponenten und Pipes handeln. Unter expo[...]

Xamarin Webcast Serie

Fri, 02 Sep 2016 14:29:54 +0200

Wie starten ab/am 14. September eine dreiteilige Webcast Serie (eng.) zu Xamarin:


September 14, 2016 - 11:00-12:00
1: Introduction to Xamarin mobile development

The first webcast will focus on the challenges on developing for multiple mobile platforms and how Xamarin enables developers to do this quicker and more efficiently. In the second part of the webcast we will look at how this development is done using Visual Studio or Xamarin Studio.

September 28, 2016 – 11:00-12:00:
2: Building Cross Platform Mobile Applications using Xamarin

October 12, 2016 – 11:00-12:00:
3: Mobile Dev Ops powered by Xamarin and Microsoft


ALM kompakt: Copy and Publish Build Artifacts vs Copy Files und Publish Build Artifacts

Thu, 01 Sep 2016 04:00:44 Z

Wer schon einmal in seinem Build verschiedene Dateien kopieren und als Artifakte ablegen wollte, der kommt an den Tasks Copy Files und Publish Build Artifacts nicht vorbei. Wer beide Tasks kombinieren möchte kann Copy and Publish Build Artifacts verwenden. Sofern jemand seine Dateien nicht kopieren möchte, um diese vor dem Publish noch anzupassen, lassen sich […]

Gitolite Berechtigungssystem

Wed, 31 Aug 2016 17:11:05 Z

In diesem Video gebe ich einen Einblick in das Berechtigungssystem von Gitolite. Ich spreche über Zugriffsgruppen, über das Vererbungssystem, über Wild Repos, über mögliche Einsatzszenarien und einiges mehr(image)

Gewährleistung und das Übel mit der Beweislastumkehr

Wed, 31 Aug 2016 10:30:45 Z

Die Gewährleistungspflicht hilft Privatpersonen nur in den ersten 6 Monaten. Besser ist es beim Kauf auf eine möglichst lange Garantie seitens des Herstellers zu achten.(image)

Sehenswert + Verlosung: Let’s Code Minecraft

Wed, 31 Aug 2016 09:10:03 Z

Bei dieser Verlosung geht es um das Video-Training Let’s Code Minecraft von Tom Wendel und Patrick Kirsch. Ein weiteres gute Beispiel dafür, wie sich das Programmieren Lernen mit einem spielerischen Ansatz, hier Minecraft, verbinden lässt. Das Video-Training im Überblick Let’s Code Minecraft – Programmieren lernen mit Minecraft Rheinwerk, 02/2016, 70 Videos, 11 Stunden Spielzeit ISBN: […]

Keine Angst vor Veränderung!

Tue, 30 Aug 2016 08:03:14 Z

Tester, die sich mit automatisierten Oberflächentests auseinandersetzen, kennen die Problematik: Oberflächen werden modernisiert und die dafür erstellten Tests lassen sich nicht mehr ausführen, da einzelne Elemente oder ganze Oberflächen neu angeordnet wurden. Nun stellt sich die Frage, ob automatisierte Oberflächentests überhaupt sinnvoll für sich stark wandelnde Oberflächen realisierbar sind? Die Antwort auf diese Frage finden […]

HoloLens: Platt oder Plastisch?

Tue, 30 Aug 2016 04:00:36 Z

Wenn man an Apps für die HoloLens denkt, dann stellt man sich in erster Linie 3D-Apps mit Hologrammen vor – diese sind natürlich auch die ganz klare Stärke der HoloLens. Doch sie kann noch mehr: alle UWP-Apps (Universal Windows Platform) können mit der HoloLens genutzt werden. Die gängigen „platten“ Apps integrieren sich als flache „Fenster“ […]

React “Hello World” mit Visual Studio 2015 ASP.NET MVC 4 (jsx und tsx)

Sat, 27 Aug 2016 22:07:25 Z

Als heißer Verfechter von AngularJs, habe ich mir gedacht schaust du auch mal über den Tellerrand und liest dich mal ein wenig in React ein. Denn bei React handelt es sich nicht um ein “komplettes” Framework wie AngularJs sondern eher um die Möglichkeit Performantere DOM Manipulation auszuführen, bei z.B. großen Listen, wo AngularJs so seine […](image)

Veranstaltungen für .NET- und Visual-Studio-Entwickler im Herbst 2016

Thu, 25 Aug 2016 08:31:00 +0200

Auch in diesem Herbst gibt es in Deutschland wieder einige Entwicklerkonferenzen für Softwareentwickler, die mit Microsoft-Werkzeugen wie Visual Studio und Visual Studio Code entwickeln.

AngularJs TypeScript Interceptor Template

Wed, 24 Aug 2016 20:31:41 Z

AngularJs bietet ein interessantes Konzept um AJAX Requests bzw. Response zu manipulieren oder zu prüfen ob ein Response bestimmte Daten enthält. Das ganze nennt sich HTTP Interceptor. Ich verwende es z.B. für die folgenden Aufgaben in meinen Projekten Prüfen ob im Response eine Meldung enthalten ist die angezeigt werden soll, wenn diese vorhanden ist, existiert […](image)

Qualität als Konzept: Qualitätsmetriken in Visual Studio

Fri, 19 Aug 2016 04:00:04 Z

Um Qualität in Software zu erreichen, muss diese auch messbar sein. Doch wie lässt sich das am einfachsten machen? Was viele hier vergessen, ist, dass bereits Visual Studio die Anzeige von Qualitätsmetriken anbietet. In diesem Teil der Blog-Serie soll gezeigt werden, wie man mit Visual Studio Qualitätsmetriken anzeigt, was diese bedeuten und wie man diese […]

HoloLens: App unter Source Control

Thu, 18 Aug 2016 04:00:06 Z

Bei einer HoloLens App handelt es sich zum Teil um ein Unity Projekt und zum Teil um ein Visual Studio Projekt. Diese gehören genau wie bei anderen Projekten unter Source Control. Doch was genau muss eingecheckt werden? In diesem Teil der Blog-Serie soll geklärt werden, wie ein HoloLens-Projekt aufgebaut ist und was davon eingecheckt werden […]

IEC 61131-3: Das ‘Command’ Pattern

Sun, 14 Aug 2016 10:23:00 Z

Durch den Aufruf einer Methode kann an einem Funktionsblock ein Befehl ausgeführt werden. Funktionsblock A ruft eine Methode von Funktionsblock B auf. So weit so gut. Doch wie lässt sich der Austausch solcher “Befehle” zwischen mehreren Funktionsblöcken flexibel gestalten? Das Command Pattern liefert hier einen interessanten Ansatz. Ein kleines Beispiel aus der Heimautomation soll uns […](image)

TFS 2015: Adding a new Windows Build Agent

Wed, 10 Aug 2016 23:45:00 Z

The TFS 2015 Build System

The build system before TFS 2015 was based on a pretty arcane XAML workflow engine which was manageable, but not fun to use. With TFS 2015 a new build system was implemented, which behave pretty much the same way as other build systems (e.g. TeamCity or AppVeyor).

The “build workflow” is based on a simple “task”-concept.

There are many related topics in the TFS world, e.g. Release-Management, but this blogpost will just focus on the “Getting the system ready”-part.

TFS Build Agents

Like the other parts of Microsoft the TFS is now also in the cross-platform business. The build system in TFS 2015 is capable of building a huge range of languages. All you need is a compatible build agent.

My (simple) goal was to build a .NET application on a Windows build agent via the new TFS 2015 build system.

Step 1: Adding a new build agent

(image) .

This one is maybe the hardest part. Instead of a huge TFS-Agent-Installer.msi you need to navigate inside the TFS control panel to the “Agent pool”-tab.

You need at least one pool and need to click the “Download Agent” button.

Step 2: Configure the agent

(image) .

The .zip package contains the actual build agent executable and a .cmd file.

Invoke the “ConfigureAgent.cmd”-file:

We run those agents as Windows Service (which was one of the last config-questions) and are pretty happy with the system.

Step 3: You are done

Now your new build agent should appear under the given build agent pool:

(image) .

After googleing around I also found the corresponding TFS HowTo, which describes more or less the complete setup. Well… now it is documented on MSDN and this blog. Maybe this will help my future-self ;)


Was ist Visual Studio Team Services?!

Tue, 09 Aug 2016 10:00:36 Z

Ein neues Video zu Visual Studio Team Services ist erschienen. Besser hätte ich VSTS auch nicht erklären können. Unbedingt ansehen!

ALM Kompakt: Versionieren von Assemblies im Build-Prozess

Tue, 09 Aug 2016 09:37:37 Z

Um welche Version der Software handelt es sich denn? Diese Frage wird spätestens dann gestellt, wenn die Software den Entwickler-PC verlässt und von Endanwendern getestet wird. Beim Reproduzieren und fixen von Fehlern ist die Angabe einer Verionsnummer und die Rückverfolgbarkeit zu dem passenden Quellcode-Stand eine zentrale Information. Doch wie werden Versionsnummern richtig vergeben? Aufbau der […]

HoloLens: Erstkontakt mit der Hardware

Tue, 09 Aug 2016 04:00:57 Z

Wie Sie beim Lesen unserer letzten Blogbeiträge mitbekommen haben, sind wir stolze Besitzer zweier Microsoft HoloLenses. Mit und ohne die Brillen sind wir bereits eifrig dabei, erste Erfahrungen zu sammeln und unseren Kunden diese Eindrücke vorzustellen (so wie z.B. auf der DWX 2016). Im vorherigen Blogartikel ging es um die Software-Plattform und die Entwicklungswerkzeuge für […]

Setup Angular2 & TypeScript in a ASP.​NET Core project using Visual Studio

Mon, 08 Aug 2016 00:00:00 Z

In this post I try to explain, how to setup a ASP.NET Core project with Angular2 and typescript in Visual Studio 2015. There are two ways to setup an Angular2 Application: The most preferred way is to use angular-cli, which is pretty simple. Unfortunately the Angular CLI doesn't use the latest version . The other way is to follow the tutorial on, which sets-up a basic starting point, but this needs a lot of manually steps. There are also two ways to setup the way you want to develop your app with ASP.NET Core: One way is to separate the client app completely from the server part. It is pretty useful to decouple the server and the client, to create almost independent applications and to host it on different machines. The other way is to host the client app inside the server app. This is useful for small applications, to have all that stuff in one place and it is easy to deploy on a single server. In this post I'm going to show you, how you can setup Angular2 app, which will be hosted inside an ASP.NET Core application using Visual Studio 2015. Using this way, the Angular-CLI is not the right choice, because it already sets up a development environment for you and all that stuff is configured a little bit different. The effort to move this to Visual Studio would be to much. I will almost follow the tutorial on But we need to change some small things to get that stuff working in Visual Studio 2015. Configure the ASP.NET Core project Let's start with a new ASP.NET Core project based on .NET Core. (The name doesn't matter, so "WebApplication391" is fine). We need to choose a Web API project, because the client side Angular2 App will probably communicate with that API and we don't need all the predefined MVC stuff. A Web API project can't serve static files like JavaScripts, CSS styles, images, or even HTML files. Therefore we need to add a reference to Microsoft.AspNetCore.StaticFiles in the project.json: "Microsoft.AspNetCore.StaticFiles": "1.0.0 ", And in the startup.cs, we need to add the following line, just before the call of `UseMvc() app.UseStaticFiles(); Another important thing we need to do in the startup.cs, is to support the Routing of Angular2. If the Browser calls a URL which doesn't exists on the server, it could be a Angular route. Especially if the URL doesn't contain a file extension. This means we need to handle the 404 error, which will occur in such cases. We need to serve the index.html to the client, if there was an 404 error, on requests without extensions. To do this we just need a simple lambda based MiddleWare, just before we call UseStaticFiles(): app.Use(async (context, next) => { await next(); if (context.Response.StatusCode == 404 && !Path.HasExtension(context.Request.Path.Value)) { context.Request.Path = "/index.html"; await next(); } }); Inside the properties folder we'll find a file called launchSe[...]

GZip für WebAPI 2 aktivieren

Thu, 04 Aug 2016 08:08:00 +0200

Mit GZip-Komprimierung kann man einiges an Netzwerklast minimieren - insbesondere, wenn größere Datenmengen übertragen werden sollen, in denen häufig ähnliche Worte vorkommen. Auch wenn das meist genutzte JSON-Format nicht ganz so geschwätzig ist wie beispielsweise SOAP, so kommen doch auch hier beispielsweise die Eigenschaftsnamen in jedem Objekt wieder vor. Wenn man dann eine Liste von Objekten überträgt, so ergibt sich hier ein Einsparungspotenzial.Im  Gegensatz zu Content-Negotiation, die die Web-API selbst übernimmt, gibt es offenbar keinen Automatismus für die Gzip-Komprimierung. Eine Suche ergab, verschiedene Lösungsansätze - z.B. den von Ben Foster oder den von Radenko Zec. Letzterer ist Vorlage für meine jetzige Lösung geworden.Schritt 1 - Erzeugen eines ActionFilters, der die Response ändert public class CompressionAttribute : ActionFilterAttribute { public override async Task OnActionExecutedAsync(HttpActionExecutedContext context, CancellationToken cancellationToken) { var acceptEncoding = context.Request.Headers.AcceptEncoding; var acceptsGzip = acceptEncoding.Contains(new System.Net.Http.Headers.StringWithQualityHeaderValue("gzip")); if (!acceptsGzip) { return; } var content = context.Response.Content; if (content == null) { return; } var headers = context.Response.Content.Headers; var bytes = await content.ReadAsByteArrayAsync(); var zlibbedContent = (await Compress(bytes)) ?? new byte[0]; context.Response.Content = new ByteArrayContent(zlibbedContent); foreach (var header in headers) { if (header.Key.Equals("Content-Length", StringComparison.OrdinalIgnoreCase)) { continue; } context.Response.Content.Headers.Add(header.Key, header.Value); } context.Response.Content.Headers.Add("Content-Encoding", "gzip"); } private static async Task Compress(byte[] value) { if (value == null) { return null; } using (var output = new MemoryStream()) { using (var gzipStream = new GZipStream(output, CompressionMode.Compress, CompressionLevel.BestSpeed)) { gzipStream.FlushMode = FlushType.Finish; await gzipStream.WriteAsync(value, 0, value.Length); } return output.ToArray(); } } }Um die Komprimierung selbst kümmert sich Ionic.Zlib. Die Implementierung ist an sich recht einfach. Zunächst wird geprüft, ob der Client Gzip-Encoding akzeptiert. Ist das nicht der Fall, dann verändert das Attribut die Ausgabe nicht. Anderenfalls wird die Ausgabe komprimiert und die Response neu aufgebaut. Durch die Neuzuweisung der Response werden auch alle bisherigen Content-Type-Header verworfen, weswegen[...]

Add HTTP headers to static files in ASP.​NET Core

Thu, 04 Aug 2016 00:00:00 Z

Usually, static files like JavaScript, CSS, images and so on, are cached on the client after the first request. But sometimes, you need to disable the cache or to add a special cache handling.

To provide static files in a ASP.NET Core application, you use the StaticFileMiddleware:


This extension method has two overloads. One of them needs a StaticFileOptions instance, which is our friend in this case. This options has a property called OnPrepareResponse of type Action. Inside this Action, you have access to the HttpContext and many more. Let's see how it looks like to set the cache life time to 12 hours:

app.UseStaticFiles(new StaticFileOptions()
    OnPrepareResponse = context =>
        context.Context.Response.Headers["Cache-Control"] = 
                "private, max-age=43200";

        context.Context.Response.Headers["Expires"] = 

With the StaticFileResponseContext, you also have access to the file of the currently handled file. With this info, it is possible to manipulate the HTTP headers just for a specific file or file type.

This approach ensures, that the client doesn't use pretty much outdated files, but use cached versions while working with it. We use this in a ASP.NET Core single page application, which uses many JavaScript, and HTML template files. In combination with continuous deployment, we need to ensure the Application uses the latest files.


XWiki: List of child-documents

Wed, 03 Aug 2016 11:00:24 Z

XWiki: Show child-documents of current document

The post XWiki: List of child-documents appeared first on Norbert Eder.

Anstehende Windows Updates auf mehreren Computern ermitteln

Tue, 02 Aug 2016 07:22:00 +0200

Ein PowerShell-Skript liefert Informationen darüber, wie viele Updates für die Windows-Computer im Netzwerk vorliegen.

HoloLens: Softwareplattform und Entwicklungswerkzeuge

Tue, 02 Aug 2016 04:00:40 Z

Sie halten die HoloLens noch nicht in eigenen Händen, wollen aber schon anfangen, Apps dafür zu entwickeln? Dank Visual Studio, Unity und dem HoloLens Emulator von Microsoft ist dies bereits heute möglich. In diesem Teil der Blog-Serie HoloLens zeigen wir Ihnen, wie Sie auch ohne Hardware mit der Entwicklung für die HoloLens starten können. Die […]

.NET User Group Vortrag in Nürnberg vom 28.07.2016

Mon, 01 Aug 2016 09:20:37 Z

Am 28.07.2016 war ich zur .NET User Group in Nürnberg eingeladen (

Dabei stand das Thema "Datenbindung Deluxe – Deep Dive in das Binding von WPF" am abendlichen Programm.

Das schöne an dem Meeting war, dass ein Grillabend dem Vortrag vorangegangen war, und wir dabei von dem Team der User Group und ebenso dem Hauptsponsor des Abends ( verköstigt wurden.

Es war mir dabei wiedermal ein Spaß mit der Community zusammen einen Abend zu verbringen und viele, bekannte aber auch neue Gesichter zu sehen.

Die Unterlagen und Beispiele gibt es wieder auf GitHub zum downloaden:

Die Folien können auch hier direkt heruntergeladen werden:

Microsoft verkündet Pläne für Entity Framework Version 1.1

Mon, 01 Aug 2016 08:00:00 +0200

Bis der Nachfolger der erst kürzlich erschienenen Version 1.0 verfügbar ist, dauert es zwar noch eine Weile, einen Blick auf zu erwartende Neuerungen gewährte Microsoft allerdings schon jetzt.

Monaco Editor in eigene Apps integrieren

Sun, 31 Jul 2016 23:00:00 +0200

Visual Studio Code verwendet ihn. Und man kann ihn auch selbst in eigenen Projekten verwenden: Den unglaublich coolen Monaco-Editor! Dieser Editor ist ein browser-basierter Code Editor, mit IntelliSense für JavaScript, JSON, HTML, CSS, Less, Sass, C# und TypeScript Support und vielem mehr. Und er kann in eigenen Web-Apps verwendet werden. Eine detaillierte Beschreibung des Monaco-Editors ist unter (Visual Studio Code) Editing Evolved vorhanden. Hier werden die coolen Features des Editors und Tipps und Tastenkombinationen beschrieben. Wer den Editor einmal selbst rasch ausprobieren will, kann dies online im Monaco Editor Playground tun. Der Editor funktioniert unter IE 9/10/11, Edge, Chrome, Firefox, Safari und Opera. Die Monaco-Editor Website liefert weitere Hintergrundinformationen. Mehr Detailsinfos gibt es unter Beispiele für den Einsatz in eigenen Apps sind auf GitHub unter Microsoft/monaco-editor-samples zu finden. Als Lizenzform ist MIT License der Open Source Initiative angegeben. Der Editor kann also beliebig verwendet und angepasst werden. Das Testen ist mit Node recht einfach (die Anleitung ist ebenso unter Microsoft/monaco-editor-samples vorhanden). npm install monaco-editor-samples cd node_modules/monaco-editor-samples npm run simpleserver Auf meiner Maschine (wo bereits einige Pakete installiert sind) sieht das Ganze so aus: Nun kann der Browser mit der lokalen Webadresse der Editor-Page geöffnet werden. Der Simple Editor präsentiert sich wie folgt. Der Monaco-Editor kann auch in einem iframe laufen. Eine sehr coole Sache. Neben Themes und den verschiedensten Sprachunterstützungen bietet der Editor eine beeindruckende Funktionalität. Wer also solch einen leistungsfähigen Editor in eigene Webprojekten benötigt, findet in dem Monaco-Editor einen unglaublich tollen Editor mit wirklich coolen Features – wie in VSC! Danke Christoph Wille für den Tipp zum Monaco-Editor![...]

Azure Logic Apps sind da

Fri, 29 Jul 2016 12:20:00 +0200

In Microsoft Azure kommen fast täglich Neuigkeiten hinzu, die Cloud machts möglich. Ein relativ neues Service darin sind die Azure Logic Apps. Diese wurden im Mai 2016 bei der Integrate 2016 conference in London vorgestellt. Nun sind die Azure Logic Apps allgemein verfügbar (GA). Azure Logic Apps stellen eine Infrastruktur bereit, die einen Dataflow aus nahezu beliebigen Datenquellen in andere Systemen ermöglichen und zwar für Power Users und Developer, in Cloud und in Hybrid-Szenarien. Einerseits unterstützt ein Designer bei der Definition des Dataflows und andrerseits können Logic Apps customized und erweitert werden. Nicht umsonst basieren Logic Apps auf BizTalk Server Logik. Azure Logic Apps könnte man als eine Art Biztalk kombiniert mit IfThisThanThat verstehen, schön verpackt als Cloud-Service. Der Startpunkt für Azure Logic Apps ist unter – oder in der eigenen Azure Subscription. Seit Ende Juli sind die Azure Logic Apps nun allgemein verfügbar (general availability), schreibt Frank Weigel, Principal Director Program Management, im Azure Blog: Announcing Azure Logic Apps general availability Der Dataflow kann im Designer modelliert werden, wie etwa in diesem Beispiel aus der Ankündigung. Wichtig hierbei sind natürlich die “Connectors”, welche für verschiedenste Systeme fertig bereitstehen. Das können öffentliche Interfaces zu Diensten wie CRM Online, Dropbox, Facebook, Twitter, GitHub, Google Drive, FTP und viele mehr sein. Für Entwickler sind die Logic Apps besonders interessant, da sie auch Daten aus eigenen Web-API Schnittstellen oder etwa direkt von Azure Blob Storage verwenden können. Umgekehrt muss keine eigene Logik für eine Transformation oder Notifications entwickelt werden, sondern dies kann in den Logic Apps erfolgen. Ich sehe das als sehr großen Vorteil gerade in Szenarien, wo Daten aus eigenen Applikationen in andere Systeme fließen sollen – oder umgekehrt. Für alle jene, die sich mit Logic Apps befassen wollen, empfehle ich die Tutorial: Connect Logic App to your Azure IoT Suite Remote Monitoring preconfigured solution Seite. Hier wird eine Demoapp angelegt, welche Daten aus einer vorkonfigurierten IoT Demosuite verwendet und ein simples Monitoring per SendGrid Dienst bereitstellt. Der Dataflow sieht im Designer etwa wie folgt aus. Dieses IoT-Beispiel demonstriert visuell recht schön, was in diesem Demo passiert: Daten werden aus einer HTTP Schnittstelle geliefert und an eine EMail Adresse per SendGrid versendet. Easy going, oder? Last but not least, jetzt , wo Azure Logic Apps verfügbar sind, gibt es auch finale Preise dafür. Das Pricing ist sehr überschaubar und abhängig von der Menge der verarbeiteten Daten, siehe hier. In d[...]