At first glance, this seems like a fairly easy exam but that’s where the danger lies. This is why I decided to write a blog post to prevent other people from falling into the same trap. I have worked with Azure, WCF, Web API, Entity Framework, ADO.NET for my whole career (all 4 years of it + the time I worked with it in college, which makes it about 5 to 6 years). But I never actually learned the theory of these technologies, I just used them in reality. So it is almost certain that I have missed some details about these technologies that could be vital to the exam. For instance, when I started working with Entity Framework, the fourth or fifth edition was released with the introduction of the DbContext. It wasn’t until a few months ago that I ever actually had to fall back to the ObjectContext class, and according to the official preparation book, it seems this class does still get some coverage on the exam. Exam Ref 70-487 Developing Windows Azure and Web Services (MCSD) Unlike the official preparation book of 70-486, which was rubbish, this one is quite easy to read.
But if you do some research yourself on MSDN, you’ll notice they just copied whole paragraphs from it! No wonder they did because Microsoft’s documentation is excellent. Nonetheless, it is a good book to start with but I don’t believe you’ll pass if you just read this book (and especially if you’re new to the technologies). Anyway, as a way to prepare for the exam, I’ll take notes (i.e. copy/paste text from MSDN) and share them with you. Moreover, I have created a Github repository where you can find code samples that could be useful for you to understand certain concepts or behaviors. Next to the book and my links, there are other options such as:
- Fire Brand Training Preparation Guide: a lot of slides covering most of the exam topics in depth.
- Pluralsight: a good source for when you have heaps of them preparing for the exam. If you don’t have the time, you might want to skip the videos and stick to the book and my posts.
The outline of the exam is straightforward. There are five chapters:
- Part 1: Accessing Data
- Part 2: Entity Framework
- Part 3: WCF Services
- Part 4: Web API
- Part 5: Deployment
The objectives are organized quite nicely and it’s easy to keep an overview of where you are. First you’ll learn about data access techniques after which you’ll go into great detail on Entity Framework, WCF and Web API. The last part, I found, is slightly different that is focuses on deployment.
Allow me to recap the objectives for this exam.
Part 1: Accessing Data
- Choose data access technologies
- Choose a technology (ADO.NET, Entity Framework, WCF Data Services, Azure storage) based on application requirements
- Implement caching
- Cache static data, apply cache policy (including expirations); use CacheDependency to refresh cache data; query notifications
- Implement transactions
- Manage transactions by using the API from System.Transactions namespace; implement distributed transactions; specify transaction isolation level
- Implement data storage in Azure
- Access data storage in Azure; choose data storage mechanism in Azure (blobs, tables, queues, SQL Database); distribute data by using the Content delivery network (CDN); handle exceptions by using retries (SQL Database); manage Azure Caching
- Create and implement a WCF Data Services service
- Address resources; implement filtering; create a query expression; access payload formats (including JSON); use data service interceptors and service operators
- Manipulate XML data structures
- Read filter, create, modify XML data structures; Manipulate XML data by using XMLReader, XMLWriter, XMLDocument, XPath, LINQ to XML; transform XML by using XSLT transformations
Part 2: Entity Framework
- Query and manipulate data by using the Entity Framework
- Query, update and delete data by using DbContext; build a query that uses deferred execution; implement lazy loading and eager loading; create and run compiled queries; query data by using Entity SQL; perform asynchronous operations using Entity Framework; map a stored procedure
- Query and manipulate data by using Data Provider for Entity Framework
- Query and manipulate data by using Connection, DataReader and Command from the System.Data.EntityClient namespace; perform synchronous and asynchronous operations; manage transactions (API); programmatically configure a Data Provider
- Query data by using LINQ to Entities
- Query data by using LINQ operators (for example, project, skip, aggregate, filter and join); log queries and database commands; implement query boundaries (IQueryable vs. IEnumerable); implement async query
- Query and manipulate data by using ADO.NET
- Query and manipulate data by using Connection, DataReader, Command, DataAdapter, DataSet; perform synchronous and asynchronous operations; manage transactions (API)
- Create an Entity Framework data model
- Structure the data model using table per type, table per class, table per hierarchy; choose and implement an approach to manage a data model (code first vs. model first vs. database first); implement POCO objects; describe a data model by using conceptual schema definitions, storage schema definition, mapping language (CSDL, SSDL, MSL) and Custom Code First Conventions
Part 3: WCF Services
- Create a WCF service
- Create contracts (service, data, message, callback and fault); implement message inspectors; implement asynchronous operations in the service
- Configure WCF services by using configuration settings
- Configure service behaviours; configure service endpoints; configure bindings including WebSocket bindings; specify a service contract; expose service metadata (XSDs, WSDL and metadata exchange endpoint); configure message compression and encoding
- Configure WCF services by using the API
- Configure service behaviours; configure service endpoints; configure binding; specify a service contract; expose service metadata (XSDs, WSDL and metadata exchange); WCF routing and discovery features
- Secure a WCF service
- Implement message level security, implement transport level security; implement certificates; design and implement multiple authentication modes
- Consume WCF services
- Generate proxies by using SvcUtil; generate proxies by creating a service reference; create and implement channel factories
- Version a WCF service
- Version different types of contracts (message, service, data); configure address, binding and routing service versioning
- Create and configure a WCF service on Azure
- Create and configure bindings for WCF services (Azure SDK—extensions to WCF); relay bindings to Azure using service bus endpoints; integrate with the Azure service bus relay
- Implement messaging patterns
- Implement one way, request/reply, streaming and duplex communication; implement Azure Service Bus and Azure Queues
- Host and manage services
- Manage services concurrency (single, multiple, reentrant); create service hosts; choose a hosting mechanism; choose an instancing mode (per call, per session, singleton); activate and manage a service by using AppFabric; implement transactional services; host services in an Azure worker role
Part 4: Web API
- Design a Web API
- Define HTTP resources with HTTP actions; plan appropriate URI space and map URI space using routing; choose appropriate HTTP method (get, put, post, delete) to meet requirements; choose appropriate format (Web API formats) for responses to meet requirements; plan when to make HTTP actions asynchronous; design and implement routes
- Implement a Web API
- Secure a Web API
- Implement HTTPBasic authentication over SSL; implement Windows Auth; prevent cross-site request forgery (XSRF); design, implement and extend authorisation and authentication filters to control access to the application; implement Cross Origin Request Sharing (CORS); implement SSO by using OAuth 2.0; configure multiple authentication modes on a single endpoint
- Host and manage Web API
- Host Web API in an ASP.NET app; self-host a Web API in your own process (a Windows service) including Open Web Interface for .NET (OWIN); host services in an Azure worker role; restrict message size; configure the host server for streaming
- Consume Web API web services
- Consume Web API services by using HttpClient synchronously and asynchronously; send and receive requests in different formats (JSON/HTML/etc.); request batching
Part 5: Deployment
- Design a deployment strategy
- Create an IIS install package; deploy to web farms; deploy a web application by using XCopy; automate a deployment from TFS or Build Server
- Choose a deployment strategy for an Azure web application
- Perform an in-place upgrade and VIP swap; configure an upgrade domain; create and configure input and internal endpoints; specify operating system configuration; deploy applications using Azure Web Site
- Configure a web application for deployment
- Switch from production/release mode to debug mode; use SetParameters to set up an IIS app pool; set permissions and passwords; enable and monitor ASP.NET App Suspend; configure WCF endpoints (including HTTPS protocol mapping), bindings and behaviours; transform web.config by using XSLT (for example, across development, test and production/release environments); configure Azure configuration settings
- Manage packages by using NuGet
- Create and configure a NuGet package; install and update an existing NuGet package; connect to a local repository cache for NuGet, set up your own package repository
- Create, configure and publish a web package
- Create an IIS InstallPackage; configure the build process to output a web package; apply pre- and post- condition actions to ensure that transformations are correctly applied; include appropriate assets (web content, certificates)
- Share assemblies between multiple applications and servers
- Prepare the environment for use of assemblies across multiple servers (interning); sign assemblies by using a strong name; deploy assemblies to the global assembly cache; implement assembly versioning; create an assembly manifest; configure assembly binding redirects (for example, from MVC4 to MVC5)
I prepared this document with a list of links for each subject which may come in handy if you want to learn more about the topic.
I’m pleased to announce that I passed the exam with a score of 873. And because this is the third exam in the MCSD Web Applications track, I am now also a certified Microsoft Certified Solutions Developer.
Of the three exams (70-483 Programming in C#, 70-486 ASP.NET MVC, 70-487 Azure & Web Service), I found this one to be the most difficult. There’s a number of reasons for that.
Not only does the exam cover a lot of different topics, some of the content has changed so much over the years it is difficult to keep track what the exam actually covers (I am looking at you Azure). Also, some of the questions were really low-quality and susceptible to various interpretations, which is what you don’t want in such exams.
Lastly, the details of the exam. Most professors and teachers taught me it’s not necessarily a good idea to remember everything by heart just for a certain test or exam because you tend to forget most of it pretty fast. For this exam, you do need to know manykeywords or elements by heart or you won’t make it – unless you have a lot of experience in the field, especially for WCF questions. That being said, I am not an expert in WCF so these questions were more difficult than Entity Framework and Web API, technologies I have worked with for a couple of years now.
However, if you have worked with the technologies before [extensively], studied for the exam and if you have a healthy dosis of problem solving skills (which you probably have – you’re a programmer after all), you could rule out many wrong answers just by using some common sense. So if you’re preparing for the exam, do it well! Take your time to study and don’t forget to try some samples yourself, it’s amazing how much you remember just by following some guy’s how-to tutorial!
You could use my preparation guide to get to the nitty gritty stuff where the preparation book doesn’t provide sufficient details. Also don’t forget to check out Chris Meyer’s post about this exam. Good luck with the exam!