Enterprise Framework

Software Solutions in the Enterprise

How To : SignalR with Azure Service Bus - Full Details

SignalR with Azure Service Bus

The steps defined within "Scaleout with Windows Azure Service Bus" was good, but not complete from my viewpoint.  Here's what you do assuming you did the prerequisites:

Step 1 : Setup Azure Cloud Services

  1. Login to Azure
  2. Click CLOUD SERVICES and Choose +NEW
  3. Choose COMPUTE > CLOUD SERVICE > Quick Create > Url > MySignalr.Cloud.Service
  4. Choose the correct hosting region
Step 2 : Setup Azure Service Bus

  1. Login to Azure
  2. Click SERVICE BUS and Choose +NEW
    1. NAMESPACE NAME: MySignalR
    2. REGION:  West US
  3. Click the Checkmark
  4. Click the newly created namespace
  5. Click Connection Strings from Below
  6. Copy the connection string, you'll use it in your Web Project
Step 3 : Setup Visual Studio 2013 Solutions

  1. Open Visual Studio 2013 as Administrator
  2. File > New Project
  3. Click Installed > Templates > Visual C# > Cloud 
  4. Click Windows Azure Cloud Service
    1. Enter the following values:
      1. Name:  MySignalR.Cloud.Service
      2. Solution Name: MySignalR
      3. Click OK
  5. In the ".NET Framework 4.5 roles" column, choose "ASP.NET Web Role" and click [>]
    1. In the right column of Windows Azure Cloud Service Solution, Click on WebRole1 and then click the pencil to edit.
    2. Change the name to MySignalR.Web and click the empty space beneath.
    3. Click OK
  6. New ASP.NET Project - MySignalR.Web
    1. Choose MVC
    2. Choose Add unit tests
    3. Click OK
  7. Then the instructions on ASP.NET tell you to install SignalR
    1. Install-Package -ProjectName SignalRChat Microsoft.AspNet.SignalR
      Install-Package -ProjectName SignalRChat Microsoft.AspNet.SignalR.ServiceBus
  8. Set the backplane for Azure
    1. Update Web.Config so the connection string can be stored there.

        <connectionStrings>
          <add name="AzureServiceBus" connectionString="Endpoint=sb://xxxx.servicebus.windows.net/;SharedSecretIssuer=owner;SharedSecretValue=XXXXXXXX" />
        </connectionStrings>
    2. Startup.cs
      public void Configuration(IAppBuilder app)
      {
          // Any connection or hub wire up and configuration should go here
          string connectionString = ConfigurationManager.ConnectionStrings["AzureServiceBus"].ConnectionString;
      GlobalHost.DependencyResolver.UseServiceBus(connectionString, "Chat"); app.MapSignalR(); }
  9. Update the MySignalR.Cloud.Service files
    1. Open ServiceConfiguration.Cloud.cscfg and add a line for Microsoft.ServiceBus.ConnectionString with the value defined in the service bus dashboard.                 

      <?xml version="1.0" encoding="utf-8"?>
      <ServiceConfiguration serviceName="MySignalR.Cloud.Service" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="4" osVersion="*" schemaVersion="2014-01.2.3">
        <Role name="MySignalR.Web">
          <Instances count="1" />
          <ConfigurationSettings>
            <Setting name="Microsoft.ServiceBus.ConnectionString" value="Endpoint=sb://xxxx.servicebus.windows.net/;SharedSecretIssuer=owner;SharedSecretValue=XXXXXXXX" />
            <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="DefaultEndpointsProtocol=https;AccountName={AccountName};AccountKey={AccountKey}" />     </ConfigurationSettings>   </Role> </ServiceConfiguration>
    Right click the the MySignalR.Service.Cloud project and click Publish

Azure Web Hosting (Virtual Machines vs Cloud Services vs Web Site)

Choosing the Azure hosting service for you is important. 


Here is a feature comparison from Microsoft to help you:


This is the best way to describe your hosting options in Azure:

Image Source : Microsoft Windows Azure

Virtual Machines (Full Control)

Microsoft Manages 

    • Hardware

You manage 

    • Operating System
    • Firewall Rules
    • Virtual Network
    • Patches
    • Updates
    • Configurations
    • Applications
    • Data
Cloud Services (Partial Control)

Microsoft Manages 

    • Operating System
    • Virtual Network
    • Hardware
    • Patches
    • Updates

You Manage

    • Firewall Rules
    • Virtual Network
    • Configurations
    • Applications
    • Data

Web Sites (Minimal Control)

Microsoft Manages 

    • Operating System
    • Virtual Network
    • Hardware
    • Patches
    • Updates
    • Firewall Rules
    • Virtual Network
    • Configurations

You Manage

    • Applications
    • Data

How To : Apple : Macboook Pro 2011 : Replace Hard Drive with SSD and Clone and Install

Apple Macbook Pro 2011 Hard Drive Replacement

  1. Purchase a 2.5" SSD Hard Drive (with a 2.5 hard drive enclosure if possible).
    1. If the 2.5" SSD does not contain a external hard drive enclosure, you can purchase one separate from Amazon.Com, just do a search for "SSD Hard Drive Enclosure"
  2. Assuming you have the SSD and Enclosure, 
    1. Attach the 2.5" SSD Hard Drive enclosure to the computer.  Most do it through a cable.
    2. If the new 2.5" SSD Hard Drive storage space is larger than your existing hard drive, skip to Step 3.  If the If the 2.5" SSD Hard Drive you bought has a smaller storage space than your current Hard Drive, you will need to resize the current drive first before you can begin cloning.  You will need to Partition the Mac hard drive so that it is now the same size or smaller of the SSD Hard Drive
      1. First Open Disk Utilities
      2. Then click the hard drive
      3. Change the space of existing hard drive so it's smaller than the new 2.5" SSD Hard Drive
    3. Start the clone
      1. Then Reboot and press Control + R
        1. Select Disk Utilities
        2. Choose the hard drive.
        3. Then Restore
        4. Turn off the Mac
    4. Replace the hard drive
      1. Turn the Macbook over and use a small Phillips screw driver to remove the bottom plate.
        1. Lift the bottom plate straight up.
      2. Replace the existing hard drive with the newly cloned 2.5" SSD Hard Drive.
      3. Power it back up.
    5. IMPORTANT:  Set the startup drive to Macintosh Hard Drive.  If you fail to do this, your Mac will be slow.
      1. Mac > System Preferences > Startup Disk > Choose "Macintosh HD OSX,..."

Troubleshooting Problem : Slow Performance : Microsoft : TFS (Team Foundation Server) 2012

If you have issues with TFS being very slow and get the below error message, there could be an issue with the number of items associated with your workspace. 

Error Message:

TF401190: The local workspace RAmiscaray;Robert Amiscaray has 101150 items in it, which exceeds the recommended limit of 100000 items.  To improve performance, either reduce the number of items in the workspace, or convert the workspace to a server workspace.

Your workspace has to many linked items in TFS. 

Solution:

  1. From Visual Studio, choose the slow performing workspace.
  2. Choose the Source Control explorer
  3. Remove project mappings from the slow performing workspace.  You may need to do several.
  4. Create a new workspace and add the previously removed project mappings.  Repeat.
  5. Keep workspaces by project mappings to a minimum.

How To : Microsoft : Sql Server 2012 Express : Service Broker : Subscribe Query Notifications : Enable for ASP.NET and SignalR

Sql Server 2012 Express - Service Broker - Subscribe Query Notifications

To enable SQL Server 2012 Express real time data notifications to use with ASP.NET and SignalR:

  1. Run Sql
    Documentation : Enable Query Notifications
    
    ALTER DATABASE AdventureWorks SET ENABLE_BROKER;
    
    CREATE QUEUE ContactChangeMessages;
    CREATE SERVICE ContactChangeNotifications ON QUEUE ContactChangeMessages ([http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);
    
    GRANT SUBSCRIBE QUERY NOTIFICATIONS TO "DomainName\Username";
    
  2. Set SQL Server Permission for IIS App Pool
    1. http://stackoverflow.com/questions/7698286/login-failed-for-user-iis-apppool-asp-net-v4-0
      1. You need to add a login to SQL Server for IIS APPPOOL\ASP.NET v4.0 and grant permissions to the database.
      2. In SSMS, under the server, expand Security, then right click Logins and select "New Login...".
      3. In the New Login dialog, enter the app pool as the login name and click "OK".
      4. You can then right click the login for the app pool, select Properties and select "User Mapping". 
      5. Check the appropriate database, and the appropriate roles. I think you could just select db_datareader and db_datawriter, 
      6. but I think you would still need to grant permissions to execute stored procedures if you do that through EF.
  3. ASP.NET SqlDependency Example:
    1. http://msdn.microsoft.com/en-us/library/9dz445ks(v=vs.110).aspx

How To : Visual Studio 2013 : Web Performance and Load Test Project : Web Test : Web Service : Use CSV File

Visual Studio 2013

Web Service Load Test for a Web Service Call using a CSV

  1. From Existing Solution:
    1. Right click Solution > Add New Project > Visual C# > Test > Web Performance and Load Test Project
    2. Type a name in the Name: MyWebPerformanceAndLoadTestProject
    3. Click OK
  2. Right click MyWebPerformanceAndLoadTestProject > Add > Web Performance Test
    1. In main content panel, right click WebTest1 > Add Data Source
      1. New Test Data Source Wizard:
        1. Select the type of data source
          1. Set Data source name : DataSource1
          2. Click CSV File
          3. Click Next >
        2. Select the CSV file the data source is based on
          1. Click ellipses ...
          2. Choose a CSV file.
            1. (NOTE:  Recommended that he first line is the labels for the csv)
              1. Example:
              2. UserId
                1
                2
                3
                4
          3. Click Finish
    2. In main content panel of WebTest1.webtest
      1. Right click WebTest1 > Add Web Service Request
        1. Right click http://localhost/ > Properties
        2. Set the url to the web service end point
          1. Set Url: http://localhost:64093/api/user
        3. Expand the url http://localhost:64093/api/user
          1. Right ClickString Body > Properties
          2. Set Content Type : application/json
          3. String Body > Click Ellipsis ...
            {
            "UserId": "{{DataSource1.UserId#csv.UserId}}"
            }
            (NOTE: Using {{DataSource1.UserId#csv.UserId}} will set the value from the CSV.)
    3. Click Save

List of No SQL Databases

List of No SQL Databases

MongoDB (from "humongous") is an open-source document database, and the leading NoSQL database.
Redis is an open source, BSD licensed, advanced key-value store. It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets and sorted sets.

Popular, blazing fast open source enterprise search platform from the Apache LuceneTMproject


Amazon SimpleDB is a highly available and flexible non-relational data store that offloads the work of database administration. Developers simply store and query data items via web services requests and Amazon SimpleDB does the rest.

Unbound by the strict requirements of a relational database, Amazon SimpleDB is optimized to provide high availability and flexibility, with little or no administrative burden. Behind the scenes, Amazon SimpleDB creates and manages multiple geographically distributed replicas of your data automatically to enable high availability and data durability. The service charges you only for the resources actually consumed in storing your data and serving your requests. You can change your data model on the fly, and data is automatically indexed for you. With Amazon SimpleDB, you can focus on application development without worrying about infrastructure provisioning, high availability, software maintenance, schema and index management, or performance tuning.

The Apache Cassandra database is the right choice when you need scalability and high availability without compromising performance. Linear scalability and proven fault-tolerance on commodity hardware or cloud infrastructure make it the perfect platform for mission-critical data. Cassandra's support for replicating across multiple datacenters is best-in-class, providing lower latency for your users and the peace of mind of knowing that you can survive regional outages.

Cassandra's data model offers the convenience of column indexes with the performance of log-structured updates, strong support for denormalization and materialized views, and powerful built-in caching.


The Apache™ Hadoop® project develops open-source software for reliable, scalable, distributed computing.

The Apache Hadoop software library is a framework that allows for the distributed processing of large data sets across clusters of computers using simple programming models. It is designed to scale up from single servers to thousands of machines, each offering local computation and storage. Rather than rely on hardware to deliver high-availability, the library itself is designed to detect and handle failures at the application layer, so delivering a highly-available service on top of a cluster of computers, each of which may be prone to failures.

Elasticsearch is a highly scalable open-source full-text search and analytics engine. It allows you to store, search, and analyze big volumes of data quickly and in near real time. It is generally used as the underlying engine/technology that powers applications that have complex search features and requirements.
CouchDB is a database that completely embraces the web. Store your data with JSON documents. Access your documents and query your indexes with your web browser, via HTTP. Index, combine, and transform your documents with JavaScript. CouchDB works well with modern web and mobile apps. You can even serve web apps directly out of CouchDB. And you can distribute your data, or your apps, efficiently using CouchDB’s incremental replication. CouchDB supports master-master setups with automatic conflict detection.

RavenDB is a transactional, open-source Document Database written in .NET, and offering a flexible data model designed to address requirements coming from real-world systems. RavenDB allows you to build high-performance, low-latency applications quickly and efficiently.


DynamoDB is a fast, fully managed NoSQL database service that makes it simple and cost-effective to store and retrieve any amount of data, and serve any level of request traffic. Its reliable throughput and single-digit millisecond latency make it a great fit for gaming, ad tech, mobile and many other applications.


Berkeley DB enables the development of custom data management solutions, without the overhead traditionally associated with such custom projects. Berkeley DB provides a collection of well-proven building-block technologies that can be configured to address any application need from the hand-held device to the datacenter, from a local storage solution to a world-wide distributed one, from kilobytes to petabytes.