SlideShare ist ein Scribd-Unternehmen logo
1 von 42
Downloaden Sie, um offline zu lesen
Building modern web sites
         with ASP .Net Web API,
        WebSockets and RSignal

     Alessandro Pilotti
     MVP ASP.Net / IIS
     Windows Azure Insider
     @alexpilotti


@   itcampro   # itcamp12   Premium conference on Microsoft technologies
ITCamp 2012 sponsors                                                       Mobile &
                                                                           Development




@   itcampro   # itcamp12   Premium conference on Microsoft technologies
Agenda                                                                     Mobile &
                                                                           Development




• ASP.Net Web API
• SignalR
• WebSocket




@   itcampro   # itcamp12   Premium conference on Microsoft technologies
What’s the deal?                                                            Mobile &
                                                                            Development




• The web app designer’s holy grail:
     – Reach the usability level of a desktop app

• The web app designer’s curse:
     – Lack of standard API on the browser’s side

• Until recently the only way out was a RIA
  framework:
     – Flash / Silverlight

@   itcampro   # itcamp12    Premium conference on Microsoft technologies
HTML5                                                                      Mobile &
                                                                           Development


• HTML5 is changing the game
• Great set of new browser features:
     –   Application cache
     –   Web storage
     –   WebSockets
     –   WebWorkers
     –   Geolocation
     –   Drag&Drop
     –   Multiple file uploads
     –   Inline SVG
     –   History management
     –   … and that Video thing


@   itcampro   # itcamp12   Premium conference on Microsoft technologies
Javascript?                                                                   Mobile &
                                                                              Development


• Javascript is getting a huge boost
     – There’s more than meets the eye
     – Its prototyping nature and flexibility is great
          • The rest sucks 
• An enormous amount of frameworks are
  available today, e.g:
     –   JQuery / JQuery UI
     –   Knockout.js
     –   Backbone.js
     –   Underscore.js
     –   History.js
     –   …And a gazillion more


@   itcampro    # itcamp12     Premium conference on Microsoft technologies
SPA                                                                        Mobile &
                                                                           Development


• Single Page Applications
     – A single HTML is loaded in the browser
     – History (aka back button) is managed via
       Javascript
     – Templates are used to load and render in the
       DOM content on demand
         • Some Ajax might be useful for that
     – Offline usage
         • Application cache
         • Web storage


@   itcampro   # itcamp12   Premium conference on Microsoft technologies
And how do we access Data?                                                      Mobile &
                                                                                Development


• Web pages communicate with the server via
  asynchronous calls
     – XmlHttpRequest (as in ajax)
     – JSON serialization
         • Way faster than XML
         • Originally decoded with “eval”
         • Modern browsers provide native encoding /
           deconding
               – JSON.parse(…) / JSON.stringify(…)
               – Even faster!
     – RESTful APIs
     – WebSockets
         • Where supported
@   itcampro     # itcamp12      Premium conference on Microsoft technologies
Great advantages                                                           Mobile &
                                                                           Development


• Faster web sites
• Lower traffic
• Clear separation
     – UI
     – Services / BL
• Enhanced testability
     – Unit tests for the server API
     – MVVM in Javascript (e.g. Knockout.js)
• Enhanced portability
     – E.g. Mobile UI


@   itcampro   # itcamp12   Premium conference on Microsoft technologies
ASP.Net Web API                                                                   Mobile &
                                                                                  Development

• ASP.Net Web API
     –   Comes with MVC4
     –   Provides a new RESTful Web API framework
     –   ODATA support
     –   Very easy
     –   Great IoC support
     –   EF integration (DbDataController<T>)
     –   Can be also installed on MVC3 or Web Forms
          • Install-Package AspNetWebApi

• All the ASP.Net Stack is open source!!
     – http://aspnetwebstack.codeplex.com/

• Alternative: WCF
     – RESTful support
     – More control
          • Complicated bindings configuration


@   itcampro     # itcamp12        Premium conference on Microsoft technologies
RESTful APIs                                                               Mobile &
                                                                           Development


• Use of HTTP verbs:
     – GET
     – POST
     – PUT
     – DELETE
• Great for CRUD operations
• Errors use HTTP semantics
     – E.g. not found => 404
• Uses custom routing
• A lot less bloated than SOAP

@   itcampro   # itcamp12   Premium conference on Microsoft technologies
RESTful APIs example                                                               Mobile &
                                                                                   Development




Action                       HTTP verb           Relative URI
Get a list of all products   GET                 /api/products
Get a product by ID          GET                 /api/products/id
Get a product by category    GET                 /api/products?category=category
Create a new product         POST                /api/products
Update a product             PUT                 /api/products/id
Delete a product             DELETE              /api/products/id




@   itcampro       # itcamp12       Premium conference on Microsoft technologies
jQuery example                                                                  Mobile &
                                                                                Development


jQuery does all the dirty job, the result is neat and clean:

$.getJSON(
       "api/products",
       function(data) {
          $.each(data, function(index, value) {
                $("#products").append('<li>' + value.Name + '</li>');
            });
        });




@   itcampro   # itcamp12        Premium conference on Microsoft technologies
ASP.Net Web API routing                                                                Mobile &
                                                                                       Development


routes.MapHttpRoute(
   name: "API Default",
   routeTemplate: "api/{controller}/{id}",
   defaults: new { id = RouteParameter.Optional }
);

• Avoids conflicts with MVC routing
• Naming Convention
     – GetAllProducts, DeleteProduct, etc
• Explicit action attributes:
     – [HttpGet], [HttpPost], [HttpPut], [HttpDelete], [NonAction]
• User "api/{controller}/{action}/{id}” for RPC style routing
     – Needs explicit verb attributes




@   itcampro      # itcamp12            Premium conference on Microsoft technologies
HttpMessageHandler                                                         Mobile &
                                                                           Development


• ASP.Net Web API is based on a pipeline
• Inherit from DelegatingHandler to create
  your handlers
     – E.g. check an API key
• Add with:
     – config.MessageHandlers.Add(new
       ApiKeyHandler());




@   itcampro   # itcamp12   Premium conference on Microsoft technologies
ODATA + Web API                                                            Mobile &
                                                                           Development


• Open Data Protocol
     – A web protocol for querying and updating data
• Enable ODATA queries on your Web API
     – Just return an IQueriable<T>
• Examples
     – http://localhost:1702/api/Products?$filter=Enabled%2
       0eq%20true

     – http://localhost:1702/api/Products?$orderby=Name%
       20desc

     – http://localhost:1702/api/Products?$filter=startswith(
       Name,’whatever')

@   itcampro   # itcamp12   Premium conference on Microsoft technologies
CURL                                                                       Mobile &
                                                                           Development


• Great tool for troubleshooting

• curl -i -H "Accept: application/json"
  http://localhost:1823/api/Products

• curl -i -H "Content-Type: application/json" -H
  "Accept: application/json" -X POST -d
  @data.json http://localhost:1823/api/Product


@   itcampro   # itcamp12   Premium conference on Microsoft technologies
WEB API DEMO


@   itcampro   # itcamp12   Premium conference on Microsoft technologies
SignalR                                                                        Mobile &
                                                                               Development


• A framework that provides some magic for:
     – Persistent connections
         • LongPolling
         • WebSockets
         • Examples: chat, stock ticker updates
     – Dynamic proxy generation for Javascript code
         • Hubs
     – JSON serialization
•   Asynchronous model
•   Supports self hosting
•   Unrelated to MVC or Web Forms
•   Install-package SignalR
     – Or: https://github.com/SignalR/SignalR


@   itcampro   # itcamp12       Premium conference on Microsoft technologies
Long Polling                                                                         Mobile &
                                                                                     Development


        A way to simulate push data connections

        1.   The client connects via HTTP
        2.   The server waits for available data
        3.   The server sends the response
        4.   Back to step one




@   itcampro      # itcamp12          Premium conference on Microsoft technologies
Persistent connections (server)                                                          Mobile &
                                                                                         Development


 public class MyConnection : PersistentConnection
 {
     protected override Task OnReceivedAsync(IRequest request, string connectionId, string data)
     {
       // Broadcast data to all clients
       return Connection.Broadcast(data);
     }
 }

Routing setup in global.asax:

RouteTable.Routes.MapConnection<MyConnection>("echo", "echo/{*operation}");




@    itcampro        # itcamp12           Premium conference on Microsoft technologies
Persistent connections (client)                                                Mobile &
                                                                               Development


 $(function () {
    var connection = $.connection('/echo');

          connection.received(function (data) {
              $('#messages').append('<li>' + data + '</li>');
          });

          connection.start();

          $("#broadcast").click(function () {
              connection.send($('#msg').val());
          });
    });


@    itcampro     # itcamp12    Premium conference on Microsoft technologies
PersistentConnection API                                                   Mobile &
                                                                           Development


• Task OnConnectedAsync(IRequest request, string
  connectionId)

• Task OnReconnectedAsync(IRequest request,
  IEnumerable groups, string connectionId)

• Task OnReceivedAsync(IRequest request, string
  connectionId, string data)

• Task OnDisconnectAsync(string connectionId)

• Task OnErrorAsync(Exception error)

@   itcampro   # itcamp12   Premium conference on Microsoft technologies
IConnection API                                                            Mobile &
                                                                           Development




• Task Broadcast(object value)
• Task Send(string signal, object value)




@   itcampro   # itcamp12   Premium conference on Microsoft technologies
External broadcasts                                                        Mobile &
                                                                           Development




var context =
GlobalHost.ConnectionManager.
GetConnectionContext<MyEndPoint>();

context.Connection.Broadcast(message);

• Useful to send messages starting from a server action




@   itcampro   # itcamp12   Premium conference on Microsoft technologies
Hub (server)                                                                  Mobile &
                                                                              Development


public class Chat : Hub
 {
   public void Send(string message)
   {
      // Call the addMessage method on all clients
      Clients.addMessage(message);
   }
 }

• Methods can have any name, the client resolves the names
  via proxy
• Clients is a dynamic object
     – addMessage is defined in Javascript!!


@   itcampro   # itcamp12      Premium conference on Microsoft technologies
Hub (client)                                                                              Mobile &
                                                                                          Development

 var chat = $.connection.chat;

    // Declare a function on the chat hub so the server can invoke it
    chat.addMessage = function(message) {
       $('#messages').append('<li>' + message + '</li>');
    };

    $("#broadcast").click(function () {
        // Call the chat method on the server
        chat.send($('#msg').val())
           .done(function() {
               console.log('Success!');
           })
           .fail(function(e) {
               console.warn(e);
           });
    });

    // Start the connection
    $.connection.hub.start();




@   itcampro        # itcamp12             Premium conference on Microsoft technologies
Look Mama, no global.asax routes                                                   Mobile &
                                                                                   Development


• SignalR’s AspNetBootStrapper defines
     – [assembly:
       PreApplicationStartMethod(typeof(AspNetBootstrapper),
       "Initialize")]
     – Initialize calls: RouteTable.Routes.MapHubs();
         • Mapping the /signalr route



• No need for:
     – Explicit global.asax route mapping
     – Web.config settings




@   itcampro    # itcamp12          Premium conference on Microsoft technologies
External broadcasts                                                        Mobile &
                                                                           Development


var context =
GlobalHost.ConnectionManager.
GetHubContext<MyHub>();

context.Clients.say(message);




@   itcampro   # itcamp12   Premium conference on Microsoft technologies
IIS setup for high loads                                 Mobile &
                                                         Development


• appcmd.exe set config /section:serverRuntime
  /appConcurrentRequestLimit:100000

• In
  %windir%Microsoft.NETFrameworkv4.0.30319
  aspnet.config
     – maxConcurrentRequestsPerCPU="20000”

• In
  %windir%Microsoft.NETFrameworkv4.0.30319
  Configmachine.config
     – <processModel autoConfig="false"
       requestQueueLimit="250000" /> technologies
@   itcampro   # itcamp12
                       Premium conference on Microsoft
SIGNALR DEMO


@   itcampro   # itcamp12   Premium conference on Microsoft technologies
WebSockets                                                                 Mobile &
                                                                           Development


• TCP/IP communication style model
     – Handshake resembles HTTP
• Interoperable
• Standard W3C (still in draft)
     – Older browsers support old versions
• Bidirectional communications
• Supports cross domain access!



@   itcampro   # itcamp12   Premium conference on Microsoft technologies
Handshake                                                                      Mobile &
                                                                               Development

Request:

GET /mychat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat
Sec-WebSocket-Version: 13
Origin: http://example.com

Response:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat




@   itcampro   # itcamp12       Premium conference on Microsoft technologies
Javascript                                                                 Mobile &
                                                                           Development


• Url: ws://yourhost/etc
     – wss: when used with SSL/TLS

var socket = new
WebSocket('ws://game.example.com:12010/update
s');
socket.onopen = function () {
   setInterval(function() {
     if (socket.bufferedAmount == 0)
       socket.send(getUpdateData());
   }, 50);
};
@   itcampro   # itcamp12   Premium conference on Microsoft technologies
Minimum requirements                                                       Mobile &
                                                                           Development


•   IE 10
•   Chrome 4
•   Firefox 4
•   Safari 5
•   Opera 11

• Server: IIS 8



@   itcampro   # itcamp12   Premium conference on Microsoft technologies
Proxy support                                                              Mobile &
                                                                           Development




• Proxies tipically don’t recognize WebSocket
  traffic

• By using SSL/TLS the problem is mitigated
     – Client uses HTTP CONNECT in this case




@   itcampro   # itcamp12   Premium conference on Microsoft technologies
IIS 8 – enable WebSockets feature                                          Mobile &
                                                                           Development




@   itcampro   # itcamp12   Premium conference on Microsoft technologies
WCF 4.5 – HTTP Activation                                                  Mobile &
                                                                           Development




@   itcampro   # itcamp12   Premium conference on Microsoft technologies
WCF 4.5                                                                    Mobile &
                                                                           Development




@   itcampro   # itcamp12   Premium conference on Microsoft technologies
In ASP.Net – updated support                                                                        Mobile &
                                                                                                    Development

•   Install-Package Microsoft.WebSockets
RouteTable.Routes.Add(new ServiceRoute("connect",
                new WebSocketServiceHostFactory(),
                typeof(GameService)));


public class GameService : WebSocketService
    {
        private static GameServer server = new GameServer();

        private GameConnection connection;

        public override void OnOpen()
        {
            string nickname = QueryParameters["nickname"];
            int gameSize = int.Parse(QueryParameters["gamesize"]);
            connection = server.JoinGame(this, nickname, gameSize);
        }

        public override void OnMessage(string message)
        {
            connection.ProcessCommand(message);
        }

        protected override void OnClose()
        {
            if(connection != null)
                connection.Disconnect();
        }
    }
}




@   itcampro           # itcamp12                    Premium conference on Microsoft technologies
WEBSOCKETS DEMO


@   itcampro   # itcamp12   Premium conference on Microsoft technologies
Q&A


@   itcampro   # itcamp12   Premium conference on Microsoft technologies

Weitere ähnliche Inhalte

Was ist angesagt?

Cordova + Ionic + MobileFirst
Cordova + Ionic + MobileFirstCordova + Ionic + MobileFirst
Cordova + Ionic + MobileFirstRaymond Camden
 
CM WebClient for CA Plex
CM WebClient for CA PlexCM WebClient for CA Plex
CM WebClient for CA PlexCM First Group
 
Development Workshop on ET1, Android and Motorola RhoElements
Development Workshop on ET1, Android and Motorola RhoElementsDevelopment Workshop on ET1, Android and Motorola RhoElements
Development Workshop on ET1, Android and Motorola RhoElementsRomin Irani
 
CM WebClient Datasheet
CM WebClient DatasheetCM WebClient Datasheet
CM WebClient DatasheetCM First Group
 
Cross-platform mobile apps with Apache Cordova
Cross-platform mobile apps with Apache CordovaCross-platform mobile apps with Apache Cordova
Cross-platform mobile apps with Apache CordovaIvano Malavolta
 
Groovy & Grails eXchange 2012 - Building an e-commerce business with gr8 tec...
Groovy & Grails eXchange 2012 - Building an  e-commerce business with gr8 tec...Groovy & Grails eXchange 2012 - Building an  e-commerce business with gr8 tec...
Groovy & Grails eXchange 2012 - Building an e-commerce business with gr8 tec...Domingo Suarez Torres
 
Mobile Vue.js – From PWA to Native
Mobile Vue.js – From PWA to NativeMobile Vue.js – From PWA to Native
Mobile Vue.js – From PWA to NativeMartinSotirov
 
Lessons learned from building Eclipse-based add-ons for commercial modeling t...
Lessons learned from building Eclipse-based add-ons for commercial modeling t...Lessons learned from building Eclipse-based add-ons for commercial modeling t...
Lessons learned from building Eclipse-based add-ons for commercial modeling t...IncQuery Labs
 
Top 10 HTML5 Features for Oracle Cloud Developers
Top 10 HTML5 Features for Oracle Cloud DevelopersTop 10 HTML5 Features for Oracle Cloud Developers
Top 10 HTML5 Features for Oracle Cloud DevelopersBrian Huff
 
Introduction to Apache Cordova (Phonegap)
Introduction to Apache Cordova (Phonegap)Introduction to Apache Cordova (Phonegap)
Introduction to Apache Cordova (Phonegap)ejlp12
 
Silver Light for every one by Subodh
Silver Light for every one by SubodhSilver Light for every one by Subodh
Silver Light for every one by SubodhSubodh Pushpak
 
Creating a Global E-Commerce Website With E-Business Suite and Fusion Middleware
Creating a Global E-Commerce Website With E-Business Suite and Fusion MiddlewareCreating a Global E-Commerce Website With E-Business Suite and Fusion Middleware
Creating a Global E-Commerce Website With E-Business Suite and Fusion MiddlewareBrian Huff
 
Web Apps atop a Content Repository
Web Apps atop a Content RepositoryWeb Apps atop a Content Repository
Web Apps atop a Content RepositoryGabriel Walt
 
Creating Next-Generation ADF Mobile Applications
Creating Next-Generation ADF Mobile ApplicationsCreating Next-Generation ADF Mobile Applications
Creating Next-Generation ADF Mobile ApplicationsBrian Huff
 
Integrating ADF Mobile with WebCenter
Integrating ADF Mobile with WebCenterIntegrating ADF Mobile with WebCenter
Integrating ADF Mobile with WebCenterBrian Huff
 
JDD2015: Java Everywhere Again—with DukeScript - Jaroslav Tulach
JDD2015: Java Everywhere Again—with DukeScript - Jaroslav TulachJDD2015: Java Everywhere Again—with DukeScript - Jaroslav Tulach
JDD2015: Java Everywhere Again—with DukeScript - Jaroslav TulachPROIDEA
 

Was ist angesagt? (20)

VisionX Prototyping.
VisionX Prototyping.VisionX Prototyping.
VisionX Prototyping.
 
Cordova + Ionic + MobileFirst
Cordova + Ionic + MobileFirstCordova + Ionic + MobileFirst
Cordova + Ionic + MobileFirst
 
CM WebClient for CA Plex
CM WebClient for CA PlexCM WebClient for CA Plex
CM WebClient for CA Plex
 
Development Workshop on ET1, Android and Motorola RhoElements
Development Workshop on ET1, Android and Motorola RhoElementsDevelopment Workshop on ET1, Android and Motorola RhoElements
Development Workshop on ET1, Android and Motorola RhoElements
 
CM WebClient Datasheet
CM WebClient DatasheetCM WebClient Datasheet
CM WebClient Datasheet
 
Apache Cordova 4.x
Apache Cordova 4.xApache Cordova 4.x
Apache Cordova 4.x
 
Cross-platform mobile apps with Apache Cordova
Cross-platform mobile apps with Apache CordovaCross-platform mobile apps with Apache Cordova
Cross-platform mobile apps with Apache Cordova
 
Crx 2.2 Deep-Dive
Crx 2.2 Deep-DiveCrx 2.2 Deep-Dive
Crx 2.2 Deep-Dive
 
Groovy & Grails eXchange 2012 - Building an e-commerce business with gr8 tec...
Groovy & Grails eXchange 2012 - Building an  e-commerce business with gr8 tec...Groovy & Grails eXchange 2012 - Building an  e-commerce business with gr8 tec...
Groovy & Grails eXchange 2012 - Building an e-commerce business with gr8 tec...
 
Mobile Vue.js – From PWA to Native
Mobile Vue.js – From PWA to NativeMobile Vue.js – From PWA to Native
Mobile Vue.js – From PWA to Native
 
Lessons learned from building Eclipse-based add-ons for commercial modeling t...
Lessons learned from building Eclipse-based add-ons for commercial modeling t...Lessons learned from building Eclipse-based add-ons for commercial modeling t...
Lessons learned from building Eclipse-based add-ons for commercial modeling t...
 
Top 10 HTML5 Features for Oracle Cloud Developers
Top 10 HTML5 Features for Oracle Cloud DevelopersTop 10 HTML5 Features for Oracle Cloud Developers
Top 10 HTML5 Features for Oracle Cloud Developers
 
Apache cordova
Apache cordovaApache cordova
Apache cordova
 
Introduction to Apache Cordova (Phonegap)
Introduction to Apache Cordova (Phonegap)Introduction to Apache Cordova (Phonegap)
Introduction to Apache Cordova (Phonegap)
 
Silver Light for every one by Subodh
Silver Light for every one by SubodhSilver Light for every one by Subodh
Silver Light for every one by Subodh
 
Creating a Global E-Commerce Website With E-Business Suite and Fusion Middleware
Creating a Global E-Commerce Website With E-Business Suite and Fusion MiddlewareCreating a Global E-Commerce Website With E-Business Suite and Fusion Middleware
Creating a Global E-Commerce Website With E-Business Suite and Fusion Middleware
 
Web Apps atop a Content Repository
Web Apps atop a Content RepositoryWeb Apps atop a Content Repository
Web Apps atop a Content Repository
 
Creating Next-Generation ADF Mobile Applications
Creating Next-Generation ADF Mobile ApplicationsCreating Next-Generation ADF Mobile Applications
Creating Next-Generation ADF Mobile Applications
 
Integrating ADF Mobile with WebCenter
Integrating ADF Mobile with WebCenterIntegrating ADF Mobile with WebCenter
Integrating ADF Mobile with WebCenter
 
JDD2015: Java Everywhere Again—with DukeScript - Jaroslav Tulach
JDD2015: Java Everywhere Again—with DukeScript - Jaroslav TulachJDD2015: Java Everywhere Again—with DukeScript - Jaroslav Tulach
JDD2015: Java Everywhere Again—with DukeScript - Jaroslav Tulach
 

Ähnlich wie ITCamp 2012 - Alessandro Pilotti - Web API, web sockets and RSignal

Mihai Tataran - Building Windows 8 Applications with HTML5 and JS
Mihai Tataran - Building Windows 8 Applications with HTML5 and JSMihai Tataran - Building Windows 8 Applications with HTML5 and JS
Mihai Tataran - Building Windows 8 Applications with HTML5 and JSITCamp
 
Building intranet applications with ASP.NET AJAX and jQuery
Building intranet applications with ASP.NET AJAX and jQueryBuilding intranet applications with ASP.NET AJAX and jQuery
Building intranet applications with ASP.NET AJAX and jQueryAlek Davis
 
Serverless Single Page Apps with React and Redux at ItCamp 2017
Serverless Single Page Apps with React and Redux at ItCamp 2017Serverless Single Page Apps with React and Redux at ItCamp 2017
Serverless Single Page Apps with React and Redux at ItCamp 2017Melania Andrisan (Danciu)
 
Mihai tataran developing modern web applications
Mihai tataran   developing modern web applicationsMihai tataran   developing modern web applications
Mihai tataran developing modern web applicationsITCamp
 
The next step from Microsoft - Vnext (Srdjan Poznic)
The next step from Microsoft - Vnext (Srdjan Poznic)The next step from Microsoft - Vnext (Srdjan Poznic)
The next step from Microsoft - Vnext (Srdjan Poznic)Geekstone
 
Social Photos - My presentation at Microsoft Tech Day
Social Photos - My presentation at Microsoft Tech DaySocial Photos - My presentation at Microsoft Tech Day
Social Photos - My presentation at Microsoft Tech DayTechMaster Vietnam
 
Building intranet applications with ASP.NET AJAX and jQuery
Building intranet applications with ASP.NET AJAX and jQueryBuilding intranet applications with ASP.NET AJAX and jQuery
Building intranet applications with ASP.NET AJAX and jQueryAlek Davis
 
IBM Think Session 8598 Domino and JavaScript Development MasterClass
IBM Think Session 8598 Domino and JavaScript Development MasterClassIBM Think Session 8598 Domino and JavaScript Development MasterClass
IBM Think Session 8598 Domino and JavaScript Development MasterClassPaul Withers
 
What's this jQuery? Where it came from, and how it will drive innovation
What's this jQuery? Where it came from, and how it will drive innovationWhat's this jQuery? Where it came from, and how it will drive innovation
What's this jQuery? Where it came from, and how it will drive innovationMarakana Inc.
 
App engine cloud_comp_expo_nyc
App engine cloud_comp_expo_nycApp engine cloud_comp_expo_nyc
App engine cloud_comp_expo_nycChris Schalk
 
Exploring pwa for shopware
Exploring pwa for shopwareExploring pwa for shopware
Exploring pwa for shopwareSander Mangel
 
"BlackBerry Webworks : Apps for The Smartphone and Tablet"
"BlackBerry Webworks : Apps for The Smartphone and Tablet""BlackBerry Webworks : Apps for The Smartphone and Tablet"
"BlackBerry Webworks : Apps for The Smartphone and Tablet"Software Park Thailand
 
C# Client to Cloud
C# Client to CloudC# Client to Cloud
C# Client to CloudStuart Lodge
 
전문가토크릴레이 1탄 html5 전망 (전종홍 박사)
전문가토크릴레이 1탄 html5 전망 (전종홍 박사)전문가토크릴레이 1탄 html5 전망 (전종홍 박사)
전문가토크릴레이 1탄 html5 전망 (전종홍 박사)Saltlux zinyus
 
전문가 토크릴레이 1탄 html5 전망 (전종홍 박사)
전문가 토크릴레이 1탄 html5 전망 (전종홍 박사)전문가 토크릴레이 1탄 html5 전망 (전종홍 박사)
전문가 토크릴레이 1탄 html5 전망 (전종홍 박사)zinyus
 
ITCamp 2013 - Raffaele Rialdi - Windows Runtime (WinRT) deep dive
ITCamp 2013 - Raffaele Rialdi - Windows Runtime (WinRT) deep diveITCamp 2013 - Raffaele Rialdi - Windows Runtime (WinRT) deep dive
ITCamp 2013 - Raffaele Rialdi - Windows Runtime (WinRT) deep diveITCamp
 
Curriculum vitae of nguyen hai quy
Curriculum vitae of nguyen hai quyCurriculum vitae of nguyen hai quy
Curriculum vitae of nguyen hai quyHai Quy Nguyen
 
Web development concepts using microsoft technologies
Web development concepts using microsoft technologiesWeb development concepts using microsoft technologies
Web development concepts using microsoft technologiesHosam Kamel
 
ITCamp 2012 - Adam Granicz - Web development with WebSharper in F#
ITCamp 2012 - Adam Granicz - Web development with WebSharper in F#ITCamp 2012 - Adam Granicz - Web development with WebSharper in F#
ITCamp 2012 - Adam Granicz - Web development with WebSharper in F#ITCamp
 
ITCamp 2013 - Lorant Domokos - Chasing the one codebase, multiple platforms d...
ITCamp 2013 - Lorant Domokos - Chasing the one codebase, multiple platforms d...ITCamp 2013 - Lorant Domokos - Chasing the one codebase, multiple platforms d...
ITCamp 2013 - Lorant Domokos - Chasing the one codebase, multiple platforms d...ITCamp
 

Ähnlich wie ITCamp 2012 - Alessandro Pilotti - Web API, web sockets and RSignal (20)

Mihai Tataran - Building Windows 8 Applications with HTML5 and JS
Mihai Tataran - Building Windows 8 Applications with HTML5 and JSMihai Tataran - Building Windows 8 Applications with HTML5 and JS
Mihai Tataran - Building Windows 8 Applications with HTML5 and JS
 
Building intranet applications with ASP.NET AJAX and jQuery
Building intranet applications with ASP.NET AJAX and jQueryBuilding intranet applications with ASP.NET AJAX and jQuery
Building intranet applications with ASP.NET AJAX and jQuery
 
Serverless Single Page Apps with React and Redux at ItCamp 2017
Serverless Single Page Apps with React and Redux at ItCamp 2017Serverless Single Page Apps with React and Redux at ItCamp 2017
Serverless Single Page Apps with React and Redux at ItCamp 2017
 
Mihai tataran developing modern web applications
Mihai tataran   developing modern web applicationsMihai tataran   developing modern web applications
Mihai tataran developing modern web applications
 
The next step from Microsoft - Vnext (Srdjan Poznic)
The next step from Microsoft - Vnext (Srdjan Poznic)The next step from Microsoft - Vnext (Srdjan Poznic)
The next step from Microsoft - Vnext (Srdjan Poznic)
 
Social Photos - My presentation at Microsoft Tech Day
Social Photos - My presentation at Microsoft Tech DaySocial Photos - My presentation at Microsoft Tech Day
Social Photos - My presentation at Microsoft Tech Day
 
Building intranet applications with ASP.NET AJAX and jQuery
Building intranet applications with ASP.NET AJAX and jQueryBuilding intranet applications with ASP.NET AJAX and jQuery
Building intranet applications with ASP.NET AJAX and jQuery
 
IBM Think Session 8598 Domino and JavaScript Development MasterClass
IBM Think Session 8598 Domino and JavaScript Development MasterClassIBM Think Session 8598 Domino and JavaScript Development MasterClass
IBM Think Session 8598 Domino and JavaScript Development MasterClass
 
What's this jQuery? Where it came from, and how it will drive innovation
What's this jQuery? Where it came from, and how it will drive innovationWhat's this jQuery? Where it came from, and how it will drive innovation
What's this jQuery? Where it came from, and how it will drive innovation
 
App engine cloud_comp_expo_nyc
App engine cloud_comp_expo_nycApp engine cloud_comp_expo_nyc
App engine cloud_comp_expo_nyc
 
Exploring pwa for shopware
Exploring pwa for shopwareExploring pwa for shopware
Exploring pwa for shopware
 
"BlackBerry Webworks : Apps for The Smartphone and Tablet"
"BlackBerry Webworks : Apps for The Smartphone and Tablet""BlackBerry Webworks : Apps for The Smartphone and Tablet"
"BlackBerry Webworks : Apps for The Smartphone and Tablet"
 
C# Client to Cloud
C# Client to CloudC# Client to Cloud
C# Client to Cloud
 
전문가토크릴레이 1탄 html5 전망 (전종홍 박사)
전문가토크릴레이 1탄 html5 전망 (전종홍 박사)전문가토크릴레이 1탄 html5 전망 (전종홍 박사)
전문가토크릴레이 1탄 html5 전망 (전종홍 박사)
 
전문가 토크릴레이 1탄 html5 전망 (전종홍 박사)
전문가 토크릴레이 1탄 html5 전망 (전종홍 박사)전문가 토크릴레이 1탄 html5 전망 (전종홍 박사)
전문가 토크릴레이 1탄 html5 전망 (전종홍 박사)
 
ITCamp 2013 - Raffaele Rialdi - Windows Runtime (WinRT) deep dive
ITCamp 2013 - Raffaele Rialdi - Windows Runtime (WinRT) deep diveITCamp 2013 - Raffaele Rialdi - Windows Runtime (WinRT) deep dive
ITCamp 2013 - Raffaele Rialdi - Windows Runtime (WinRT) deep dive
 
Curriculum vitae of nguyen hai quy
Curriculum vitae of nguyen hai quyCurriculum vitae of nguyen hai quy
Curriculum vitae of nguyen hai quy
 
Web development concepts using microsoft technologies
Web development concepts using microsoft technologiesWeb development concepts using microsoft technologies
Web development concepts using microsoft technologies
 
ITCamp 2012 - Adam Granicz - Web development with WebSharper in F#
ITCamp 2012 - Adam Granicz - Web development with WebSharper in F#ITCamp 2012 - Adam Granicz - Web development with WebSharper in F#
ITCamp 2012 - Adam Granicz - Web development with WebSharper in F#
 
ITCamp 2013 - Lorant Domokos - Chasing the one codebase, multiple platforms d...
ITCamp 2013 - Lorant Domokos - Chasing the one codebase, multiple platforms d...ITCamp 2013 - Lorant Domokos - Chasing the one codebase, multiple platforms d...
ITCamp 2013 - Lorant Domokos - Chasing the one codebase, multiple platforms d...
 

Mehr von ITCamp

ITCamp 2019 - Stacey M. Jenkins - Protecting your company's data - By psychol...
ITCamp 2019 - Stacey M. Jenkins - Protecting your company's data - By psychol...ITCamp 2019 - Stacey M. Jenkins - Protecting your company's data - By psychol...
ITCamp 2019 - Stacey M. Jenkins - Protecting your company's data - By psychol...ITCamp
 
ITCamp 2019 - Silviu Niculita - Supercharge your AI efforts with the use of A...
ITCamp 2019 - Silviu Niculita - Supercharge your AI efforts with the use of A...ITCamp 2019 - Silviu Niculita - Supercharge your AI efforts with the use of A...
ITCamp 2019 - Silviu Niculita - Supercharge your AI efforts with the use of A...ITCamp
 
ITCamp 2019 - Peter Leeson - Managing Skills
ITCamp 2019 - Peter Leeson - Managing SkillsITCamp 2019 - Peter Leeson - Managing Skills
ITCamp 2019 - Peter Leeson - Managing SkillsITCamp
 
ITCamp 2019 - Mihai Tataran - Governing your Cloud Resources
ITCamp 2019 - Mihai Tataran - Governing your Cloud ResourcesITCamp 2019 - Mihai Tataran - Governing your Cloud Resources
ITCamp 2019 - Mihai Tataran - Governing your Cloud ResourcesITCamp
 
ITCamp 2019 - Ivana Milicic - Color - The Shadow Ruler of UX
ITCamp 2019 - Ivana Milicic - Color - The Shadow Ruler of UXITCamp 2019 - Ivana Milicic - Color - The Shadow Ruler of UX
ITCamp 2019 - Ivana Milicic - Color - The Shadow Ruler of UXITCamp
 
ITCamp 2019 - Florin Coros - Implementing Clean Architecture
ITCamp 2019 - Florin Coros - Implementing Clean ArchitectureITCamp 2019 - Florin Coros - Implementing Clean Architecture
ITCamp 2019 - Florin Coros - Implementing Clean ArchitectureITCamp
 
ITCamp 2019 - Florin Loghiade - Azure Kubernetes in Production - Field notes...
ITCamp 2019 - Florin Loghiade -  Azure Kubernetes in Production - Field notes...ITCamp 2019 - Florin Loghiade -  Azure Kubernetes in Production - Field notes...
ITCamp 2019 - Florin Loghiade - Azure Kubernetes in Production - Field notes...ITCamp
 
ITCamp 2019 - Florin Flestea - How 3rd Level support experience influenced m...
ITCamp 2019 - Florin Flestea -  How 3rd Level support experience influenced m...ITCamp 2019 - Florin Flestea -  How 3rd Level support experience influenced m...
ITCamp 2019 - Florin Flestea - How 3rd Level support experience influenced m...ITCamp
 
ITCamp 2019 - Emil Craciun - RoboRestaurant of the future powered by serverle...
ITCamp 2019 - Emil Craciun - RoboRestaurant of the future powered by serverle...ITCamp 2019 - Emil Craciun - RoboRestaurant of the future powered by serverle...
ITCamp 2019 - Emil Craciun - RoboRestaurant of the future powered by serverle...ITCamp
 
ITCamp 2019 - Eldert Grootenboer - Cloud Architecture Recipes for The Enterprise
ITCamp 2019 - Eldert Grootenboer - Cloud Architecture Recipes for The EnterpriseITCamp 2019 - Eldert Grootenboer - Cloud Architecture Recipes for The Enterprise
ITCamp 2019 - Eldert Grootenboer - Cloud Architecture Recipes for The EnterpriseITCamp
 
ITCamp 2019 - Cristiana Fernbach - Blockchain Legal Trends
ITCamp 2019 - Cristiana Fernbach - Blockchain Legal TrendsITCamp 2019 - Cristiana Fernbach - Blockchain Legal Trends
ITCamp 2019 - Cristiana Fernbach - Blockchain Legal TrendsITCamp
 
ITCamp 2019 - Andy Cross - Machine Learning with ML.NET and Azure Data Lake
ITCamp 2019 - Andy Cross - Machine Learning with ML.NET and Azure Data LakeITCamp 2019 - Andy Cross - Machine Learning with ML.NET and Azure Data Lake
ITCamp 2019 - Andy Cross - Machine Learning with ML.NET and Azure Data LakeITCamp
 
ITCamp 2019 - Andy Cross - Business Outcomes from AI
ITCamp 2019 - Andy Cross - Business Outcomes from AIITCamp 2019 - Andy Cross - Business Outcomes from AI
ITCamp 2019 - Andy Cross - Business Outcomes from AIITCamp
 
ITCamp 2019 - Andrea Saltarello - Modernise your app. The Cloud Story
ITCamp 2019 - Andrea Saltarello - Modernise your app. The Cloud StoryITCamp 2019 - Andrea Saltarello - Modernise your app. The Cloud Story
ITCamp 2019 - Andrea Saltarello - Modernise your app. The Cloud StoryITCamp
 
ITCamp 2019 - Andrea Saltarello - Implementing bots and Alexa skills using Az...
ITCamp 2019 - Andrea Saltarello - Implementing bots and Alexa skills using Az...ITCamp 2019 - Andrea Saltarello - Implementing bots and Alexa skills using Az...
ITCamp 2019 - Andrea Saltarello - Implementing bots and Alexa skills using Az...ITCamp
 
ITCamp 2019 - Alex Mang - I'm Confused Should I Orchestrate my Containers on ...
ITCamp 2019 - Alex Mang - I'm Confused Should I Orchestrate my Containers on ...ITCamp 2019 - Alex Mang - I'm Confused Should I Orchestrate my Containers on ...
ITCamp 2019 - Alex Mang - I'm Confused Should I Orchestrate my Containers on ...ITCamp
 
ITCamp 2019 - Alex Mang - How Far Can Serverless Actually Go Now
ITCamp 2019 - Alex Mang - How Far Can Serverless Actually Go NowITCamp 2019 - Alex Mang - How Far Can Serverless Actually Go Now
ITCamp 2019 - Alex Mang - How Far Can Serverless Actually Go NowITCamp
 
ITCamp 2019 - Peter Leeson - Vitruvian Quality
ITCamp 2019 - Peter Leeson - Vitruvian QualityITCamp 2019 - Peter Leeson - Vitruvian Quality
ITCamp 2019 - Peter Leeson - Vitruvian QualityITCamp
 
ITCamp 2018 - Ciprian Sorlea - Million Dollars Hello World Application
ITCamp 2018 - Ciprian Sorlea - Million Dollars Hello World ApplicationITCamp 2018 - Ciprian Sorlea - Million Dollars Hello World Application
ITCamp 2018 - Ciprian Sorlea - Million Dollars Hello World ApplicationITCamp
 
ITCamp 2018 - Ciprian Sorlea - Enterprise Architectures with TypeScript And F...
ITCamp 2018 - Ciprian Sorlea - Enterprise Architectures with TypeScript And F...ITCamp 2018 - Ciprian Sorlea - Enterprise Architectures with TypeScript And F...
ITCamp 2018 - Ciprian Sorlea - Enterprise Architectures with TypeScript And F...ITCamp
 

Mehr von ITCamp (20)

ITCamp 2019 - Stacey M. Jenkins - Protecting your company's data - By psychol...
ITCamp 2019 - Stacey M. Jenkins - Protecting your company's data - By psychol...ITCamp 2019 - Stacey M. Jenkins - Protecting your company's data - By psychol...
ITCamp 2019 - Stacey M. Jenkins - Protecting your company's data - By psychol...
 
ITCamp 2019 - Silviu Niculita - Supercharge your AI efforts with the use of A...
ITCamp 2019 - Silviu Niculita - Supercharge your AI efforts with the use of A...ITCamp 2019 - Silviu Niculita - Supercharge your AI efforts with the use of A...
ITCamp 2019 - Silviu Niculita - Supercharge your AI efforts with the use of A...
 
ITCamp 2019 - Peter Leeson - Managing Skills
ITCamp 2019 - Peter Leeson - Managing SkillsITCamp 2019 - Peter Leeson - Managing Skills
ITCamp 2019 - Peter Leeson - Managing Skills
 
ITCamp 2019 - Mihai Tataran - Governing your Cloud Resources
ITCamp 2019 - Mihai Tataran - Governing your Cloud ResourcesITCamp 2019 - Mihai Tataran - Governing your Cloud Resources
ITCamp 2019 - Mihai Tataran - Governing your Cloud Resources
 
ITCamp 2019 - Ivana Milicic - Color - The Shadow Ruler of UX
ITCamp 2019 - Ivana Milicic - Color - The Shadow Ruler of UXITCamp 2019 - Ivana Milicic - Color - The Shadow Ruler of UX
ITCamp 2019 - Ivana Milicic - Color - The Shadow Ruler of UX
 
ITCamp 2019 - Florin Coros - Implementing Clean Architecture
ITCamp 2019 - Florin Coros - Implementing Clean ArchitectureITCamp 2019 - Florin Coros - Implementing Clean Architecture
ITCamp 2019 - Florin Coros - Implementing Clean Architecture
 
ITCamp 2019 - Florin Loghiade - Azure Kubernetes in Production - Field notes...
ITCamp 2019 - Florin Loghiade -  Azure Kubernetes in Production - Field notes...ITCamp 2019 - Florin Loghiade -  Azure Kubernetes in Production - Field notes...
ITCamp 2019 - Florin Loghiade - Azure Kubernetes in Production - Field notes...
 
ITCamp 2019 - Florin Flestea - How 3rd Level support experience influenced m...
ITCamp 2019 - Florin Flestea -  How 3rd Level support experience influenced m...ITCamp 2019 - Florin Flestea -  How 3rd Level support experience influenced m...
ITCamp 2019 - Florin Flestea - How 3rd Level support experience influenced m...
 
ITCamp 2019 - Emil Craciun - RoboRestaurant of the future powered by serverle...
ITCamp 2019 - Emil Craciun - RoboRestaurant of the future powered by serverle...ITCamp 2019 - Emil Craciun - RoboRestaurant of the future powered by serverle...
ITCamp 2019 - Emil Craciun - RoboRestaurant of the future powered by serverle...
 
ITCamp 2019 - Eldert Grootenboer - Cloud Architecture Recipes for The Enterprise
ITCamp 2019 - Eldert Grootenboer - Cloud Architecture Recipes for The EnterpriseITCamp 2019 - Eldert Grootenboer - Cloud Architecture Recipes for The Enterprise
ITCamp 2019 - Eldert Grootenboer - Cloud Architecture Recipes for The Enterprise
 
ITCamp 2019 - Cristiana Fernbach - Blockchain Legal Trends
ITCamp 2019 - Cristiana Fernbach - Blockchain Legal TrendsITCamp 2019 - Cristiana Fernbach - Blockchain Legal Trends
ITCamp 2019 - Cristiana Fernbach - Blockchain Legal Trends
 
ITCamp 2019 - Andy Cross - Machine Learning with ML.NET and Azure Data Lake
ITCamp 2019 - Andy Cross - Machine Learning with ML.NET and Azure Data LakeITCamp 2019 - Andy Cross - Machine Learning with ML.NET and Azure Data Lake
ITCamp 2019 - Andy Cross - Machine Learning with ML.NET and Azure Data Lake
 
ITCamp 2019 - Andy Cross - Business Outcomes from AI
ITCamp 2019 - Andy Cross - Business Outcomes from AIITCamp 2019 - Andy Cross - Business Outcomes from AI
ITCamp 2019 - Andy Cross - Business Outcomes from AI
 
ITCamp 2019 - Andrea Saltarello - Modernise your app. The Cloud Story
ITCamp 2019 - Andrea Saltarello - Modernise your app. The Cloud StoryITCamp 2019 - Andrea Saltarello - Modernise your app. The Cloud Story
ITCamp 2019 - Andrea Saltarello - Modernise your app. The Cloud Story
 
ITCamp 2019 - Andrea Saltarello - Implementing bots and Alexa skills using Az...
ITCamp 2019 - Andrea Saltarello - Implementing bots and Alexa skills using Az...ITCamp 2019 - Andrea Saltarello - Implementing bots and Alexa skills using Az...
ITCamp 2019 - Andrea Saltarello - Implementing bots and Alexa skills using Az...
 
ITCamp 2019 - Alex Mang - I'm Confused Should I Orchestrate my Containers on ...
ITCamp 2019 - Alex Mang - I'm Confused Should I Orchestrate my Containers on ...ITCamp 2019 - Alex Mang - I'm Confused Should I Orchestrate my Containers on ...
ITCamp 2019 - Alex Mang - I'm Confused Should I Orchestrate my Containers on ...
 
ITCamp 2019 - Alex Mang - How Far Can Serverless Actually Go Now
ITCamp 2019 - Alex Mang - How Far Can Serverless Actually Go NowITCamp 2019 - Alex Mang - How Far Can Serverless Actually Go Now
ITCamp 2019 - Alex Mang - How Far Can Serverless Actually Go Now
 
ITCamp 2019 - Peter Leeson - Vitruvian Quality
ITCamp 2019 - Peter Leeson - Vitruvian QualityITCamp 2019 - Peter Leeson - Vitruvian Quality
ITCamp 2019 - Peter Leeson - Vitruvian Quality
 
ITCamp 2018 - Ciprian Sorlea - Million Dollars Hello World Application
ITCamp 2018 - Ciprian Sorlea - Million Dollars Hello World ApplicationITCamp 2018 - Ciprian Sorlea - Million Dollars Hello World Application
ITCamp 2018 - Ciprian Sorlea - Million Dollars Hello World Application
 
ITCamp 2018 - Ciprian Sorlea - Enterprise Architectures with TypeScript And F...
ITCamp 2018 - Ciprian Sorlea - Enterprise Architectures with TypeScript And F...ITCamp 2018 - Ciprian Sorlea - Enterprise Architectures with TypeScript And F...
ITCamp 2018 - Ciprian Sorlea - Enterprise Architectures with TypeScript And F...
 

Kürzlich hochgeladen

Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesZilliz
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 

Kürzlich hochgeladen (20)

Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector Databases
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 

ITCamp 2012 - Alessandro Pilotti - Web API, web sockets and RSignal

  • 1. Building modern web sites with ASP .Net Web API, WebSockets and RSignal Alessandro Pilotti MVP ASP.Net / IIS Windows Azure Insider @alexpilotti @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 2. ITCamp 2012 sponsors Mobile & Development @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 3. Agenda Mobile & Development • ASP.Net Web API • SignalR • WebSocket @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 4. What’s the deal? Mobile & Development • The web app designer’s holy grail: – Reach the usability level of a desktop app • The web app designer’s curse: – Lack of standard API on the browser’s side • Until recently the only way out was a RIA framework: – Flash / Silverlight @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 5. HTML5 Mobile & Development • HTML5 is changing the game • Great set of new browser features: – Application cache – Web storage – WebSockets – WebWorkers – Geolocation – Drag&Drop – Multiple file uploads – Inline SVG – History management – … and that Video thing @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 6. Javascript? Mobile & Development • Javascript is getting a huge boost – There’s more than meets the eye – Its prototyping nature and flexibility is great • The rest sucks  • An enormous amount of frameworks are available today, e.g: – JQuery / JQuery UI – Knockout.js – Backbone.js – Underscore.js – History.js – …And a gazillion more @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 7. SPA Mobile & Development • Single Page Applications – A single HTML is loaded in the browser – History (aka back button) is managed via Javascript – Templates are used to load and render in the DOM content on demand • Some Ajax might be useful for that – Offline usage • Application cache • Web storage @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 8. And how do we access Data? Mobile & Development • Web pages communicate with the server via asynchronous calls – XmlHttpRequest (as in ajax) – JSON serialization • Way faster than XML • Originally decoded with “eval” • Modern browsers provide native encoding / deconding – JSON.parse(…) / JSON.stringify(…) – Even faster! – RESTful APIs – WebSockets • Where supported @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 9. Great advantages Mobile & Development • Faster web sites • Lower traffic • Clear separation – UI – Services / BL • Enhanced testability – Unit tests for the server API – MVVM in Javascript (e.g. Knockout.js) • Enhanced portability – E.g. Mobile UI @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 10. ASP.Net Web API Mobile & Development • ASP.Net Web API – Comes with MVC4 – Provides a new RESTful Web API framework – ODATA support – Very easy – Great IoC support – EF integration (DbDataController<T>) – Can be also installed on MVC3 or Web Forms • Install-Package AspNetWebApi • All the ASP.Net Stack is open source!! – http://aspnetwebstack.codeplex.com/ • Alternative: WCF – RESTful support – More control • Complicated bindings configuration @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 11. RESTful APIs Mobile & Development • Use of HTTP verbs: – GET – POST – PUT – DELETE • Great for CRUD operations • Errors use HTTP semantics – E.g. not found => 404 • Uses custom routing • A lot less bloated than SOAP @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 12. RESTful APIs example Mobile & Development Action HTTP verb Relative URI Get a list of all products GET /api/products Get a product by ID GET /api/products/id Get a product by category GET /api/products?category=category Create a new product POST /api/products Update a product PUT /api/products/id Delete a product DELETE /api/products/id @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 13. jQuery example Mobile & Development jQuery does all the dirty job, the result is neat and clean: $.getJSON( "api/products", function(data) { $.each(data, function(index, value) { $("#products").append('<li>' + value.Name + '</li>'); }); }); @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 14. ASP.Net Web API routing Mobile & Development routes.MapHttpRoute( name: "API Default", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); • Avoids conflicts with MVC routing • Naming Convention – GetAllProducts, DeleteProduct, etc • Explicit action attributes: – [HttpGet], [HttpPost], [HttpPut], [HttpDelete], [NonAction] • User "api/{controller}/{action}/{id}” for RPC style routing – Needs explicit verb attributes @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 15. HttpMessageHandler Mobile & Development • ASP.Net Web API is based on a pipeline • Inherit from DelegatingHandler to create your handlers – E.g. check an API key • Add with: – config.MessageHandlers.Add(new ApiKeyHandler()); @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 16. ODATA + Web API Mobile & Development • Open Data Protocol – A web protocol for querying and updating data • Enable ODATA queries on your Web API – Just return an IQueriable<T> • Examples – http://localhost:1702/api/Products?$filter=Enabled%2 0eq%20true – http://localhost:1702/api/Products?$orderby=Name% 20desc – http://localhost:1702/api/Products?$filter=startswith( Name,’whatever') @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 17. CURL Mobile & Development • Great tool for troubleshooting • curl -i -H "Accept: application/json" http://localhost:1823/api/Products • curl -i -H "Content-Type: application/json" -H "Accept: application/json" -X POST -d @data.json http://localhost:1823/api/Product @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 18. WEB API DEMO @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 19. SignalR Mobile & Development • A framework that provides some magic for: – Persistent connections • LongPolling • WebSockets • Examples: chat, stock ticker updates – Dynamic proxy generation for Javascript code • Hubs – JSON serialization • Asynchronous model • Supports self hosting • Unrelated to MVC or Web Forms • Install-package SignalR – Or: https://github.com/SignalR/SignalR @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 20. Long Polling Mobile & Development A way to simulate push data connections 1. The client connects via HTTP 2. The server waits for available data 3. The server sends the response 4. Back to step one @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 21. Persistent connections (server) Mobile & Development public class MyConnection : PersistentConnection { protected override Task OnReceivedAsync(IRequest request, string connectionId, string data) { // Broadcast data to all clients return Connection.Broadcast(data); } } Routing setup in global.asax: RouteTable.Routes.MapConnection<MyConnection>("echo", "echo/{*operation}"); @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 22. Persistent connections (client) Mobile & Development $(function () { var connection = $.connection('/echo'); connection.received(function (data) { $('#messages').append('<li>' + data + '</li>'); }); connection.start(); $("#broadcast").click(function () { connection.send($('#msg').val()); }); }); @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 23. PersistentConnection API Mobile & Development • Task OnConnectedAsync(IRequest request, string connectionId) • Task OnReconnectedAsync(IRequest request, IEnumerable groups, string connectionId) • Task OnReceivedAsync(IRequest request, string connectionId, string data) • Task OnDisconnectAsync(string connectionId) • Task OnErrorAsync(Exception error) @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 24. IConnection API Mobile & Development • Task Broadcast(object value) • Task Send(string signal, object value) @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 25. External broadcasts Mobile & Development var context = GlobalHost.ConnectionManager. GetConnectionContext<MyEndPoint>(); context.Connection.Broadcast(message); • Useful to send messages starting from a server action @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 26. Hub (server) Mobile & Development public class Chat : Hub { public void Send(string message) { // Call the addMessage method on all clients Clients.addMessage(message); } } • Methods can have any name, the client resolves the names via proxy • Clients is a dynamic object – addMessage is defined in Javascript!! @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 27. Hub (client) Mobile & Development var chat = $.connection.chat; // Declare a function on the chat hub so the server can invoke it chat.addMessage = function(message) { $('#messages').append('<li>' + message + '</li>'); }; $("#broadcast").click(function () { // Call the chat method on the server chat.send($('#msg').val()) .done(function() { console.log('Success!'); }) .fail(function(e) { console.warn(e); }); }); // Start the connection $.connection.hub.start(); @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 28. Look Mama, no global.asax routes Mobile & Development • SignalR’s AspNetBootStrapper defines – [assembly: PreApplicationStartMethod(typeof(AspNetBootstrapper), "Initialize")] – Initialize calls: RouteTable.Routes.MapHubs(); • Mapping the /signalr route • No need for: – Explicit global.asax route mapping – Web.config settings @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 29. External broadcasts Mobile & Development var context = GlobalHost.ConnectionManager. GetHubContext<MyHub>(); context.Clients.say(message); @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 30. IIS setup for high loads Mobile & Development • appcmd.exe set config /section:serverRuntime /appConcurrentRequestLimit:100000 • In %windir%Microsoft.NETFrameworkv4.0.30319 aspnet.config – maxConcurrentRequestsPerCPU="20000” • In %windir%Microsoft.NETFrameworkv4.0.30319 Configmachine.config – <processModel autoConfig="false" requestQueueLimit="250000" /> technologies @ itcampro # itcamp12 Premium conference on Microsoft
  • 31. SIGNALR DEMO @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 32. WebSockets Mobile & Development • TCP/IP communication style model – Handshake resembles HTTP • Interoperable • Standard W3C (still in draft) – Older browsers support old versions • Bidirectional communications • Supports cross domain access! @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 33. Handshake Mobile & Development Request: GET /mychat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== Sec-WebSocket-Protocol: chat Sec-WebSocket-Version: 13 Origin: http://example.com Response: HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk= Sec-WebSocket-Protocol: chat @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 34. Javascript Mobile & Development • Url: ws://yourhost/etc – wss: when used with SSL/TLS var socket = new WebSocket('ws://game.example.com:12010/update s'); socket.onopen = function () { setInterval(function() { if (socket.bufferedAmount == 0) socket.send(getUpdateData()); }, 50); }; @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 35. Minimum requirements Mobile & Development • IE 10 • Chrome 4 • Firefox 4 • Safari 5 • Opera 11 • Server: IIS 8 @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 36. Proxy support Mobile & Development • Proxies tipically don’t recognize WebSocket traffic • By using SSL/TLS the problem is mitigated – Client uses HTTP CONNECT in this case @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 37. IIS 8 – enable WebSockets feature Mobile & Development @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 38. WCF 4.5 – HTTP Activation Mobile & Development @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 39. WCF 4.5 Mobile & Development @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 40. In ASP.Net – updated support Mobile & Development • Install-Package Microsoft.WebSockets RouteTable.Routes.Add(new ServiceRoute("connect", new WebSocketServiceHostFactory(), typeof(GameService))); public class GameService : WebSocketService { private static GameServer server = new GameServer(); private GameConnection connection; public override void OnOpen() { string nickname = QueryParameters["nickname"]; int gameSize = int.Parse(QueryParameters["gamesize"]); connection = server.JoinGame(this, nickname, gameSize); } public override void OnMessage(string message) { connection.ProcessCommand(message); } protected override void OnClose() { if(connection != null) connection.Disconnect(); } } } @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 41. WEBSOCKETS DEMO @ itcampro # itcamp12 Premium conference on Microsoft technologies
  • 42. Q&A @ itcampro # itcamp12 Premium conference on Microsoft technologies