Konda.eu

Monthly Archives: December 2015

5 comments

ASP.NET 5 and SignalR 3

SignalR is a great library from Microsoft for working with WebSockets. It's really fast and supports various fallbacks even for people that use browsers from stone age itself (IE6 for example, but let just hope nobody uses it anymore).

Of course not everything is that nice... When it comes to implementing it in ASP.NET 5 with absolutely NO documentation the entire process of setting this two frameworks/libraries together can be very, very painful.

First thing, to be able to download latest version of SignalR 3 for ASP.NET 5 MyGet repository needs to be referenced. I Added Nuget.config with the following content, but you can also add an URL to global NuGet configuration:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageRestore>
    <add key="enabled" value="True" /> <!-- Allow NuGet to download missing packages -->
    <add key="automatic" value="True" /> <!-- Automatically check for missing packages during build in Visual Studio -->
  </packageRestore>
  <packageSources>
    <add key="aspnetmaster" value="https://www.myget.org/F/aspnetmaster/api/v3/index.json" />
  </packageSources>
</configuration>

After that is set up, go to project.json and add the following line to dependencies:

"Microsoft.AspNet.SignalR.Server": "3.0.0-*"

The last thing needed to be done is to add SignalR to the application. To do that go to Startup.cs and make sure that you have the following line somewhere in Configure method.

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    // ...
    app.UseSignalR();
    // ...
}

At this step everything is ready to go. You can follow any SignalR tutorial, like this chat room for example. At this point there are no updated client side JavaScript libraries, version 2.2.0 works just fine but on the bad side you're still stuck with jQuery...

Some unfortunate souls like myself may stumble upon the following exception:

InvalidOperationException: No service for type 'Microsoft.AspNet.SignalR.Hubs.IJavaScriptProxyGenerator' has been registered.

At this point there are two choices. First one is to manually generate JavaScript files for all Hubs in the project, more about this you can read here, or the second option that I prefer is to register the default provider and all of the JavaScript code is automatically generated. To do this, simply go back to your Startup.cs into ConfigureServices method, and make sure that you have the following line inside:

public void ConfigureServices(IServiceCollection services)
{
    // ...
    services.AddSignalR();
    // ...
}

That's it! SignalR 3 should now successfully work together with ASP.NET 5 with automatic code generation.

No comments

Slides and Demos from AngularJS 1.x Presentation

A couple of days ago I had a presentation about AngularJS 1.x. If anyone is interested below are slides and link to demo project.

No comments

AngularJS hide fields until initialized

A pesky thing about AngularJS is that all of the code in HTML that is mustache {{ is visible. To avoid this everything related to AngularJS can be hidden until website is finished loading up using:

[ng\:cloak], 
[ng-cloak], 
[data-ng-cloak], 
[x-ng-cloak], 
.ng-cloak, 
.x-ng-cloak {
    display: none !important;
}

 

1 comment

C# and AngularJS - Receive Post data

AngularJS is awesome, C# also. But AngularJS has slightly unstandardized way of sending data over networks. Data is packet body instead of header, which may cause quite some problems  if you're unaware of this.

MVC Framework will automatically deserialize data into object when it receives, you only need to tell it that it should look for data in body instead of header.

[HttpPost]
public int method([FromBody]Model m)
{
        // ...