programming microsoft azure
TRANSCRIPT
Developing Applications Better [email protected] +91-9916043731
Subhasish Ghosh | Vice President, 8K Miles Software Services, Inc.@nerdometer
WISDOM SeriesMicrosoft, Hyderabad
Developing Applications Better [email protected] +91-9916043731
70-532: Developing Microsoft Azure Solutions
Developing Applications Better [email protected] +91-9916043731
Architecting Microsoft Azure Solutions
NOT
Developing Applications Better [email protected] +91-9916043731
Microsoft Azure Fundamentals
Exam 70-532: Developing Microsoft Azure Solutions Preparation Module
Developing Applications Better [email protected] +91-9916043731
[email protected] [email protected] [email protected]
https://www.linkedin.com/in/sghosh2011
Developing Applications Better [email protected] +91-9916043731
Day1 Day2 Day3
• Introduction• Cloud Dev
Best Practices• Azure AD & SSO
• In-depth Blog
Storage & Code
Examples
• Queuing on
Microsoft Azure• Using DCS
• WPI & WebMatrix3
- Demo
• VM, Cloud Services
& Web Sites -
Analysis
• Lab 2 • Lab 4 • Use Cases & Demo • Lab 7
• One ASP.NET
Philosophy
• Web Sites –Deployment,
Configuration &
Monitoring
• Data Storage
Options
• Azure Service Bus
Queues• Understanding
Failures on Cloud• PowerShell Cmdlets
• Microsoft Open
Technologies
• Web Sites &
AutoScale – Demo
• Blobs, Disks, Tables
& Queues
• Azure Queues &
Service Bus Queues
– Compared
• Types & Scope • Lab 8
• VM Depot - Demo• Cloud Services –
Developing, Deploying &
Monitoring
• Serialized Object
Graphs in JSON
(DocumentDB)
• Caching on Azure:
Understanding
Redis - Tutorial
• Building Telemetry
• Staged Deployment
& GitHub
Integration
• OWIN Katana
Project – Examples
& Demo
• async in .NET 4.5 • Lab 3• Microsoft Azure
Redis• Lab 6 • Lab 9
• Lab 1• Code Review & 3
Best Practices
• Data Partitioning
Strategies• Lab 5
• DevOps on Cloud -
Principles• ASSESSMENT
Developing Applications Better [email protected] +91-9916043731
Laboratories 1,2,3,4,5,6,7,8,91. SETUP: Install Microsoft Azure SDK for .NET (vs2013) - 2.5, Install Visual Studio Express 2013 for Web with Microsoft Azure SDK – 2.5, Microsoft Azure
PowerShell, Open Microsoft Azure Subscription TRIAL 30-day account. Create a VM, stop & stop-deallocate using Azure PowerShell.
2. SECURITY: Creating an ASP.NET MVC application and then adding Single Sign-On (SSO) to your application using Azure Active Directory (AAD).
3. DOCUMENTDB: Creating a DocumentDB account; leveraging DocumentDB in a VS2013 application.
4. CLOUD SERVICES: Creating a Cloud Services (Web & Worker Roles) application. Publishing to Microsoft Azure associated with a Microsoft Azure
Storage Account; Configure Auto-scaling.
5. AZURE REDIS CACHE: Creating and configuring Azure Redis Cache, configuring cache clients, adding and removing objects from the cache, and storing
ASP.NET session state in the cache.
6. MONITORING CODE: Creating a New Relic account, integrating it with an Azure Web Sites application and then publishing to Azure; and checking out
the tool.
7. SOURCE CONTROL: Using Git in VS2013, Exploring features (branches, merging, comments etc.).
8. DEVOPS AUTOMATION: Using Microsoft Azure PowerShell – installation, cmdlets, Azure Subscription details and Runbooks Introduction.
9. STAGED PUBLISHING: Staged Publishing feature of Azure Web Sites along with GitHub Integration.
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Microsoft Open Technologies
http://msopentech.com/
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
http://katanaproject.codeplex.com/
Microsoft via Katana is building a set of components around hosting abstraction for your applications. That hosting abstraction is 'OWIN'.
OWIN is a specification. Not a code // library // framework.
Developing Applications Better [email protected] +91-9916043731
Why OWIN?2 Key Motivations:
- System.Web.dll (ASP.NET runtime) 12+ years old web framework
- Was built with WebForms in mind
- Not flexible enough to support modern frameworks: Web API, SignalR, NancyFX
- Always execute lots of legacy ASP.NET-specific code that has no more use
Developing Applications Better [email protected] +91-9916043731
Why OWIN?2 Key Motivations:
- Node.js Envy
Developing Applications Better [email protected] +91-9916043731
http://msopentech.com/
Katana Architecture
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Quick Demo
PM> Install-Package Microsoft.Owin.Host.SystemWeb
PM> Install-Package Microsoft.Owin.Diagnostics
PM> Install-Package Microsoft.Owin.Host.HttpListener
Developing Applications Better [email protected] +91-9916043731
Project Katana
http://msopentech.com/
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Cloud Services - Azure’s original PaaS solution
You create the code, define the
configuration, and deploy it to Azure.
Azure sets up the compute environment,
runs your code then monitors and
maintains it for you.
No need to get your hands dirty with the
Virtual Machine configurations unless you
need to.
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Role
(“Template”)Configuration
OS Family (Server 2008,
2012)
VM Size
Role Type (Web, Worker)
Endpoints
Settings
Etc…
Code
InstanceRunning VM, configured,
with code deployed,
endpoints opened, etc.
Keep at least two instances
running for improved fault
tolerance and SLA.
Load balanced Endpoints
are automatically
maintained.
*
Developing Applications Better [email protected] +91-9916043731
Role
(“Template”)Configuration
OS Family (Server 2008,
2012)
VM Size
Role Type (Web, Worker)
Endpoints
Settings
Etc…
Code
InstanceRunning VM, configured,
with code deployed,
endpoints opened, etc.
Keep at least two instances
running for improved fault
tolerance and SLA.
Load balanced Endpoints
are automatically
maintained.
*Sca
le U
p
Add more instances for
load balancing and
improved fault tolerance
when demand is high.
Developing Applications Better [email protected] +91-9916043731
Role
(“Template”)Configuration
OS Family (Server 2008,
2012)
VM Size
Role Type (Web, Worker)
Endpoints
Settings
Etc…
Code
InstanceRunning VM, configured,
with code deployed,
endpoints opened, etc.
Keep at least two instances
running for improved fault
tolerance and SLA.
Load balanced Endpoints
are automatically
maintained.
*
Sca
le D
ow
n
Remove un-needed
instances to save money
when demand is low
Developing Applications Better [email protected] +91-9916043731
Workloads for Cloud Services• VM is explicitly IaaS, Cloud Services is explicitly PaaS, Web Sites is explicitly
hosting.
• Cloud Services gives you administrative access to your application's VMs. Web Sites do not provide this. This lets you install arbitrary software that your application needs, something that's not possible with Web Sites.
• N-tier stateless applications is perfect for Cloud Services. Offers both web roles and worker roles (requirement for separate VMs for their business logic).
• Cloud Services provides separate staging and production environments, making application updates somewhat smoother than Web Sites.
• Cloud Services lets you use networking technologies such as Azure Virtual Network and Azure Connect to hook on-premises computers to Cloud Services applications. No such thing on Web Sites.
• Cloud Services lets you use Remote Desktop to connect directly to an application's VMs. No such thing on Web Sites.
Developing Applications Better [email protected] +91-9916043731
0
1
2
3
4
5
6
7
8
9
10
Web Sites Cloud Services Virtual Machines
Co
ntr
ol
Co
ntr
ol
Co
ntr
ol
Leg
acy
Ap
p S
up
po
rt
Leg
acy
Ap
p S
up
po
rt
Leg
acy
Ap
p S
up
po
rt
Ease
of
Man
ag
em
en
t
Ease
of
Mg
mt
Ease
Ag
ilit
y
Ag
ilit
y
Ag
ilit
y
Developing Applications Better [email protected] +91-9916043731
Microsoft Azure Service Model Example cloud service configuration with a single web role and a single worker role
Developing Applications Better [email protected] +91-9916043731
Mixing Virtual Machines & Stateless RolesMultiple cloud services with stateless and virtual machines
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
CloudConfigurationManager
• Role RoleEntryPoint RoleEnvironment
Developing Applications Better [email protected] +91-9916043731
• <WebRole />• <Sites />
• <WorkerRole/>
• <InputEndpoints />
• <InstanceInputEndpoints />
• <InternalEndpoints />
• <ConfigurationSettings />
• <Certificates />
• <LocalResources />
• <Imports />
• <Startup />
Developing Applications Better [email protected] +91-9916043731
• <Instances />
• <ConfigurationSettings />
• <Certificates />
Developing Applications Better [email protected] +91-9916043731
WAStorageEmulator.exe /init
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
VIPs in Cloud Services
- Public IP address pointing to Azure Cloud Service where VM is deployed.
- Every Cloud Service has a VIP and every Cloud Service can have several VMs.
- A VIP assigned to Cloud Service won’t be released until last VM on that Cloud Service is Stopped (De-allocated) or Deleted
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
AccessTheWebAsync
GetStringAsync
DoIndependentWork
await
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
- Do not expose asynchronous wrappers around synchronous methods
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Day1 Day2 Day3
• Introduction• Cloud Dev
Best Practices• Azure AD & SSO
• In-depth Blog
Storage & Code
Examples
• Queuing on
Microsoft Azure• Using DCS
• WPI & WebMatrix3
- Demo
• VM, Cloud Services
& Web Sites -
Analysis
• Lab 2 • Lab 4 • Use Cases & Demo • Lab 7
• One ASP.NET
Philosophy
• Web Sites –Deployment,
Configuration &
Monitoring
• Data Storage
Options
• Azure Service Bus
Queues• Understanding
Failures on Cloud• PowerShell Cmdlets
• Microsoft Open
Technologies
• Web Sites &
AutoScale – Demo
• Blobs, Disks, Tables
& Queues
• Azure Queues &
Service Bus Queues
– Compared
• Types & Scope • Lab 8
• VM Depot - Demo• Cloud Services –
Developing, Deploying &
Monitoring
• Serialized Object
Graphs in JSON
(DocumentDB)
• Caching on Azure:
Understanding
Redis - Tutorial
• Building Telemetry
• Staged Deployment
& GitHub
Integration
• OWIN Katana
Project – Examples
& Demo
• async in .NET 4.5 • Lab 3• Microsoft Azure
Redis• Lab 6 • Lab 9
• Lab 1• Code Review & 3
Best Practices
• Data Partitioning
Strategies• Lab 5
• DevOps on Cloud -
Principles• ASSESSMENT
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
There are two apps on the web and the user has a plain-old browser.
Since the two apps never talk to each other directly, a mechanism would need to be devices where the user logs onto App A, receives and access token into their browser and passes it through to App B with then calls back to App A via some API to make sure the access token is valid.
If we passed the access token into the user’s browser so it’s possible it could be snatched (perhaps by some malicious javascript). This is why most developers stick to the standard SSO protocols like SAML, OpenID and WS-Federation for the classic web-app to web-app single sign-on.
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
AD user
ASP.NET MVC application
set permissions
Connecting
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Case Study:
SQL DB (PAAS) SQL VM (IAAS)
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
What we already know about Azure Tables
• How Azure Storage Tables are structured
Developing Applications Better [email protected] +91-9916043731
• Even though Azure Storage Tables are represented in a tabular format, they are not to be confused with RDBMS tables
What we already know about Azure Tables
Developing Applications Better [email protected] +91-9916043731
http://bit.do/azure-tables-vs-sql
Developing Applications Better [email protected] +91-9916043731
http://bit.do/cqrs-pattern
http://bit.do/event-sourcing-pattern
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Audit Events for
Bob Tabor
Audit Events for
Richard BoughtonAudit Events for
Dan Star
Partition Key: User Identifier (Bob Tabor or 12345, Richard Boughton or 12346, etc.)
Row Key: Something that uniquely identified a given entity (audit event) for that user. I.e., GUID
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
http://bit.do/querying-tables-entities
http://bit.do/odata
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
http://bit.do/documentdb-sharding
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
http://bit.do/documentdb-pricing
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
http://weblogs.asp.net/scottgu/azure-new-documentdb-nosql-service-new-search-service-new-sql-alwayson-vm-template-and-more
http://azure.microsoft.com/en-us/services/documentdb/
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Average Usage
Co
mp
ute
Time
Co
mp
ute
Time
Average Usage
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Open VS2013 MyFixIt.Persistence MyFixItContext.cs
Developing Applications Better [email protected] +91-9916043731
The FixItContext class derives from Entity Framework, DbContext class, identifies the database and specifies the tables in the database.
The connection string in the Web.config file is called “appdb”. Here, points to the local development database.
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
The Entity Framework creates a FixItTasks table based on the properties included in the FixItTaskentity class.
This is POCO (Plain Old CLR Object) class. EF creates a table and executes a CRUD (create-read-update-delete) ops.
Developing Applications Better [email protected] +91-9916043731
Server Explorer appdb FixItTasks Right-click and Show Table Data
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
https://msdn.microsoft.com/en-us/library/azure/hh767287.aspx
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Store ASP.NET Session State in cache
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Day1 Day2 Day3
• Introduction• Cloud Dev
Best Practices• Azure AD & SSO
• In-depth Blog
Storage & Code
Examples
• Queuing on
Microsoft Azure• Using DCS
• WPI & WebMatrix3
- Demo
• VM, Cloud Services
& Web Sites -
Analysis
• Lab 2 • Lab 4 • Use Cases & Demo • Lab 7
• One ASP.NET
Philosophy
• Web Sites –Deployment,
Configuration &
Monitoring
• Data Storage
Options
• Azure Service Bus
Queues• Understanding
Failures on Cloud• PowerShell Cmdlets
• Microsoft Open
Technologies
• Web Sites &
AutoScale – Demo
• Blobs, Disks, Tables
& Queues
• Azure Queues &
Service Bus Queues
– Compared
• Types & Scope • Lab 8
• VM Depot - Demo• Cloud Services –
Developing, Deploying &
Monitoring
• Serialized Object
Graphs in JSON
(DocumentDB)
• Caching on Azure:
Understanding
Redis - Tutorial
• Building Telemetry
• Staged Deployment
& GitHub
Integration
• OWIN Katana
Project – Examples
& Demo
• async in .NET 4.5 • Lab 3• Microsoft Azure
Redis• Lab 6 • Lab 9
• Lab 1• Code Review & 3
Best Practices
• Data Partitioning
Strategies• Lab 5
• DevOps on Cloud -
Principles• ASSESSMENT
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
NuGet Package Manager Console:
Go into the newrelic.config file, and copy in the license key from Connection Info
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
• Using Git in VS2013
• Add Solution to Source Control
• Git, OK, creates Git repository in solution folder
• Right-click Solution Explorer, Commit
• Enter commit comment, and click Commit
• Compare with Modified, to see changes that were made
• Explore Branches, Merging etc.
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
http://msdn.microsoft.com/en-us/library/dn568099.aspx
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731
Developing Applications Better [email protected] +91-9916043731