Posted on Leave a comment

ASP.NET Core updates in .NET Core 3.1 Preview 3

Avatar

Sourabh

.NET Core 3.1 Preview 3 is now available. This release is primarily focused on bug fixes.

See the release notes for additional details and known issues.

Get started

To get started with ASP.NET Core in .NET Core 3.1 Preview 3 install the .NET Core 3.1 Preview 3 SDK.

If you’re on Windows using Visual Studio, for the best experience we recommend installing the latest preview of Visual Studio 2019 16.4. Installing Visual Studio 2019 16.4 will also install .NET Core 3.1 Preview 3, so you don’t need to separately install it. For Blazor development with .NET Core 3.1, Visual Studio 2019 16.4 is required.

Alongside this .NET Core 3.1 Preview 3 release, we’ve also released a Blazor WebAssembly update. To install the latest Blazor WebAssembly template also run the following command:

dotnet new -i Microsoft.AspNetCore.Blazor.Templates::3.1.0-preview3.19555.2

Upgrade an existing project

To upgrade an existing ASP.NET Core 3.1 Preview 2 project to 3.1 Preview 3:

  • Update all Microsoft.AspNetCore.* package references to 3.1.0-preview3.19555.2

See also the full list of breaking changes in ASP.NET Core 3.1.

That’s it! You should now be all set to use .NET Core 3.1 Preview 3!

Give feedback

We hope you enjoy the new features in this preview release of ASP.NET Core! Please let us know what you think by filing issues on GitHub.

Thanks for trying out ASP.NET Core!

Avatar

Posted on Leave a comment

Improvements in .NET Core 3.0 for troubleshooting and monitoring distributed apps

Avatar

Sourabh

Post was authored by Sergey Kanzhelev. Thank you David Fowler and Richard Lander for reviews.

Introduction

Operating distributed apps is hard. Distributed apps typically consists of multiple components. These components may be owned and operated by different teams. Every interaction with an app results in distributed trace of code executions across many components. If your customer experiences a problem – pinpointing the root cause in one of components participated in a distributed trace is a hard task.

One big difference of distributed apps comparing to monoliths is a difficulty to correlate telemetry (like logs) across a single distributed trace. Looking at logs you can see how each component processed each request. But it is hard to know which request in once component and request in other component belong to the same distributed trace.

Historically, Application Performance Monitoring (APM) vendors provided the functionality of distributed trace context propagation from one component to another. Telemetry is correlated using this context. Due to heterogeneous nature of many environments, with components owned by different teams and using different tools for monitoring, it was always hard to instrument distributed apps consistently. APM vendors provided automatic code injection agents and SDKs to handle complexity of understanding various distributed context formats and RPC protocols.

With the upcoming transition of W3C Trace Context specification into Proposed Recommendation maturity level, and support of this specification by many vendors and platforms, the complexity of the context propagation is decreasing. The W3C Trace Context specification describes semantics of the distributed trace context and its format. This ensures that every component in a distributed app may understand this context and propagate it to components it calls into.

Microsoft is working on making distributed apps development easier with many ongoing developments like Orleans framework and project Dapr. As for distributed trace context propagation – Microsoft services and platforms will be adopting a W3C Trace Context format.

We believe that ASP.NET Core must provide an outstanding experience for building distributed tracing apps. With every release of ASP.NET Core we execute on this promise. This post describes the scenario of distributed tracing and logging highlighting improvements in .NET Core 3.0 and talks about discussions of a new exciting features we plan to add going forward.

Distributed Tracing and Logging

Let’s explore distributed tracing in .NET Core 3.0 and improvements recently made. First, we’ll see how two “out of the box” ASP.NET Core 3.0 apps has logs correlated across the entire distributed trace. Second, we’ll explore how easy it is to set distributed trace context for any .NET Core application and how it will automatically be propagated across http. And third, we’ll see how the same distributed trace identity is used by telemetry SDKs like OpenTelemetry and ASP.NET Core logs.

This demo will also demonstrate how .NET Core 3.0 embraces W3C Trace Context standard and what other features it offers.

Demo set up

In this demo we will have three simple components: ClientApp, FrontEndApp and BackEndApp.

BackEndApp is a template ASP.NET Core application called WeatherApp. It exposes a REST API to get a weather forecast.

FrontEndApp proxies all incoming requests into the calls to BackEndApp using this controller:

[ApiController]
[Route("[controller]")]
public class WeatherForecastProxyController : ControllerBase
{ private readonly ILogger<WeatherForecastProxyController> _logger; private readonly HttpClient _httpClient; public WeatherForecastProxyController( ILogger<WeatherForecastProxyController> logger, HttpClient httpClient) { _logger = logger; _httpClient = httpClient; } [HttpGet] public async Task<IEnumerable<WeatherForecast>> Get() { var jsonStream = await _httpClient.GetStreamAsync("http://localhost:5001/weatherforecast"); var weatherForecast = await JsonSerializer.DeserializeAsync<IEnumerable<WeatherForecast>>(jsonStream); return weatherForecast; }
}

Finally, ClientApp is a .NET Core 3.0 Windows Forms app. ClientApp calls into FrontEndApp for the weather forecast.

private async Task<string> GetWeatherForecast()
{ return await _httpClient.GetStringAsync( "http://localhost:5000/weatherforecastproxy");
}

Please note, there were no additional SDKs enabled or libraries installed on demo apps. As the demo progresses – every code change will be mentioned.

Correlated logs

Let’s make the very first call from ClientApp and take a look at the logs produced by FrontEndApp and BackEndApp.

FrontEndApp (a few line breaks added for readability):

info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1] => ConnectionId:0HLR1BR0PL1CH => RequestPath:/weatherforecastproxy RequestId:0HLR1BR0PL1CH:00000001, SpanId:|363a800a-4cf070ad93fe3bd8., TraceId:363a800a-4cf070ad93fe3bd8, ParentId:
Executed endpoint 'FrontEndApp.Controllers.WeatherForecastProxyController.Get (FrontEndApp)'

BackEndApp:

info: BackEndApp.Controllers.WeatherForecastController[0] => ConnectionId:0HLR1BMQHFKRL => RequestPath:/weatherforecast RequestId:0HLR1BMQHFKRL:00000002, SpanId:|363a800a-4cf070ad93fe3bd8.94c1cdba_, TraceId:363a800a-4cf070ad93fe3bd8, ParentId:|363a800a-4cf070ad93fe3bd8. Executed endpoint 'FrontEndApp.Controllers.WeatherForecastController.Get (BackEndApp)'

Like magic, logs from two independent apps share the same TraceId. Behind the scene, ASP.NET Core 3.0 app will initialize a distributed trace context and pass it in the header. This is how incoming headers to the BackEndApp looks like:

You may notice that FrontEndApp didn’t receive any additional headers:

The reason is that in ASP.NET Core apps – distributed trace being initiated by ASP.NET Core framework itself on every incoming request. Next section explains how to do it for any .NET Core 3.0 app.

Initiate distributed trace in .NET Core 3.0 app

You may have noticed the difference in behavior of Windows Forms ClientApp and ASP.NET Core FrontEndApp. ClientApp didn’t set any distributed trace context. So FrontEndApp didn’t receive it. It is easy to set up distributed operation. Easiest way to do it is to use an API called Activity from the DiagnosticSource package.

private async Task<string> GetWeatherForecast()
{ var activity = new Activity("CallToBackend").Start(); try { return await _httpClient.GetStringAsync( "http://localhost:5000/weatherforecastproxy"); } finally { activity.Stop(); }
}

Once you have started an activity, HttpClient knows that distributed trace context needs to be propagated. Now all three components – ClientApp, FrontEndApp and BackEndApp share the same TraceId.

W3C Trace Context support

You may notice that the context is propagating using the header called Request-Id. This header was introduced in Asp.Net Core 2.0 and is used by default for better compatibility with these apps. However, as the W3C Trace Context specification is being widely adopted, it is recommended to switch to this format of context propagation.

With .NET Core 3.0, it is easy to switch to W3C Trace Context format to propagate distributed trace identifiers. Easiest way to do it is in the main method- just add a simple line in the Main method:

static void Main()
{ Activity.DefaultIdFormat = ActivityIdFormat.W3C; … Application.Run(new MainForm());
}

Now, when the FrontEndApp receives requests from the ClientApp, you see a traceparent header in the request:

The ASP.NET Core app will understand this header and recognize that it needs to use W3C Trace Context format for outgoing calls now.

Note, ASP.NET Core apps will recognize the correct format of distributed trace context automatically. However, it is still a good practice to switch the default format of distributed trace context to W3C for better interoperability in heterogeneous environments.

You will see all the logs attributed with the TraceId and SpanId obtained from the incoming header:

info: Microsoft.AspNetCore.Hosting.Diagnostics[1] => ConnectionId:0HLQV2BC3VP2T => RequestPath:/weatherforecast RequestId:0HLQV2BC3VP2T:00000001, SpanId:da13aa3c6fd9c146, TraceId:f11a03e3f078414fa7c0a0ce568c8b5c, ParentId:5076c17d0a604244 Request starting HTTP/1.1 GET http://localhost:5000/weatherforecast

Activity and distributed tracing with OpenTelemetry

OpenTelemetry provides a single set of APIs, libraries, agents, and collector services to capture distributed traces and metrics from your application. You can analyze them using Prometheus, Jaeger, Zipkin, and other observability tools.

Let’s enable OpenTelemetry on the BackEndApp. It is very easy to do, just call AddOpenTelemetry on startup:

services.AddOpenTelemetry(b => b.UseZipkin(o => { o.ServiceName="BackEndApp"; o.Endpoint=new Uri("http://zipkin /api/v2/spans"); }) .AddRequestCollector());

Now, as we just saw, TraceId in the FrontEndApp logs will match TraceId in the BackEndApp.

info: Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker[2] => ConnectionId:0HLR2RC6BIIVO => RequestPath:/weatherforecastproxy RequestId:0HLR2RC6BIIVO:00000001, SpanId:54e2de7b9428e940, TraceId:e1a9b61ec50c954d852f645262c7b31a, ParentId:69dce1f155911a45 => FrontEndApp.Controllers.WeatherForecastProxyController.Get (FrontEndApp)
Executed action FrontEndApp.Controllers.WeatherForecastProxyController.Get (FrontEndApp) in 3187.3112ms info: Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker[2] => ConnectionId:0HLR2RLEHSKBV => RequestPath:/weatherforecast RequestId:0HLR2RLEHSKBV:00000001, SpanId:0e783a0867544240, TraceId:e1a9b61ec50c954d852f645262c7b31a, ParentId:54e2de7b9428e940 => BackEndApp.Controllers.WeatherForecastController.Get (BackEndApp)
Executed action BackEndApp.Controllers.WeatherForecastController.Get (BackEndApp) in 3085.9111ms

Furthermore, the same Trace will be reported by Zipkin. So now you can correlate distributed traces collected by your distributed tracing tool and logs from the machine. You can also give this TraceId to the user when ClientApp experience issues. The user can share it with your app support and corresponding logs and distributed traces can be easily discovered across all components.

Taking example one step further – you can easily enable monitoring for all three components and see them on the gantt chart.

ASP.NET Core apps integrates with distributed trace

As we just seen telemetry collected by Application Monitoring vendors is correlated using the same distributed trace context as ASP.NET Core uses. This makes ASP.NET Core 3.0 apps great for the environments where different components are owned by different teams.

Imagine that only two of apps – A and C on the picture below enabled telemetry collection using SDK like OpenTelemetry. Before ASP.NET Core 3.0 it would mean that distributed tracing will not work, and a trace will be “broken” by app B.

With ASP.NET Core 3.0, since in most deployments ASP.NET Core apps are configured with the basic logging enabled, app B will propagate distributed trace context. This distributed traces from A and C will be correlated.

With the example of apps from before – if ClientApp and BackEndApp are instrumented and FrontEndApp is not – you see distributed trace is still being correlated:

This also makes ASP.NET Core apps great for the service mesh environments. In service mesh deployments, A and C from the picture above may represent a service mesh. In order for service mesh to stitch request entering and leaving component B – certain headers have to be propagated by an app. See this note from the Istio for example:

Although Istio proxies are able to automatically send spans, they need some hints to tie together the entire trace. Applications need to propagate the appropriate HTTP headers so that when the proxies send span information, the spans can be correlated correctly into a single trace.

As we work with service mesh authors to adopt W3C Trace Context format, ASP.NET Core apps will “just work” and propagate needed headers.

Passing additional context

Talking about other scenarios, it is often the case that you want to share more context between components in a distributed app. Let’s say a ClientApp wants to send its version so all REST calls will know where the request is coming from. You can add these properties in Activity.Baggage like this:

private async Task<string> GetWeatherForecast()
{ var activity = new Activity("CallToBackend") .AddBaggage("appVersion", "v1.0") .Start(); try { return await _httpClient.GetStringAsync( "http://localhost:5000/weatherforecastproxy"); } finally { activity.Stop(); }
}

Now on server side you see an additional header Correlation-Context in both – FrontEndApp and BackEndApp.

And you can use the Activity.Baggage to attribute your logs:

var appVersion = Activity.Current.Baggage.FirstOrDefault(b => b.Key == "appVersion").Value;
using (_logger.BeginScope($"appVersion={appVersion}"))
{ _logger.LogInformation("this weather forecast is from random source");
}

And you see the scope now contains an appVersion:

info: FrontEndApp.Controllers.WeatherForecastController[0] => ConnectionId:0HLQV353507UG => RequestPath:/weatherforecast RequestId:0HLQV353507UG:00000001, SpanId:37a0f7ebf3ecac42, TraceId:c7e07b7719a7a3489617663753f985e4, ParentId:f5df77ba38504846 => FrontEndApp.Controllers.WeatherForecastController.Get (BackEndApp) => appVersion=v1.0 this weather forecast is from random source

Next steps

With the improvements for ASP.NET Core 3.0 we hear that some of the features included in ASP.NET Core is hard to consume. Developers and DevOps wants a turnkey telemetry solution that will work with many APM vendors. We believe that investments we are making in OpenTelemetry will allow more people to benefit from investments we are making in ASP.NET Core monitoring and troubleshooting. This is one of the big areas of investments for a team.

We also help people adopt W3C Trace Context everywhere and will be making it a default distributed trace context propagation format in future versions of ASP.NET Core.

Another area of investments is to improve distributed context propagation scenarios. Distributed apps comparing to monoliths are lacking common shared state with the lifetime of a single distributed trace. This shared state (or context) can be used for basic logging as was described in this article, as well as for advanced routing of requests, experimentation, A/B testing, business context propagation, etc. Some of scenarios are described in this epic: Distributed Context in ASP.NET and Open Telemetry.

Please send us your feedback and tell what improvements in distributed apps troubleshooting and monitoring we need to make.

Avatar

Posted on Leave a comment

Minimize distractions and stay focused with AI-powered updates in Microsoft 365

It’s no secret that work and life are speeding up. It’s not uncommon to spend all day in meetings, writing emails, or on the phone, leaving little time to focus on what is most important to you. Many of us have never-ending to-do lists and spend time working after hours to complete pressing tasks. MyAnalytics, your source of personal productivity insights in Microsoft 365, was built to help with these very challenges—and today it’s getting a refresh.

Via a dashboard, Insights in Outlook, and weekly email digests, MyAnalytics provides insights and AI-powered suggestions to help you work smarter. A new MyAnalytics experience—generally available starting today—makes the insights more outcome-oriented in four key areas: focus, wellbeing, network, and collaboration. For example, insights that previously showed you the hours you spent on email, chats, calls, and meetings outside your working hours over the past week now show you the number of days you successfully disconnected after work over the past month. That way, you can set goals and build habits that help you achieve more quiet days.

Shareable video.

To make these insights even more actionable, in the coming quarters, we’ll introduce the ability to create personal plans to make it easy to set goals and take steps toward improving your work patterns each day. Focus plan will be the first in this series of MyAnalytics updates. By helping you plan focus time on a regular basis to complete your most pressing tasks and limiting distractions, focus plan in MyAnalytics will help you balance collaboration with meaningful output. Today, we’re unveiling the core elements of the focus plan.

Create a personal focus plan

Productivity preferences are different for everyone, but experts on deep work report that setting aside regular blocks of time to focus on challenging work can have massive benefits. With the focus plan, MyAnalytics will help you establish a daily focus time routine. The focus plan will offer you the flexibility to have daily focus time booked automatically based on your availability, or surface suggestions to book focus time manually as you work in Outlook. The automatic booking algorithm will prioritize booking morning hours, if they are open, so you can be at your peak capacity for tackling challenging analytics tasks.

MyAnalytics Dashboard with Focus tab selected. User clicks “Try it out” to get started and has book focus time automatically every day. Outlook calendar shows focus time slots in green.

Maintain your focus routine

If you receive a meeting invite that conflicts with booked focus time, Outlook will provide inline suggestions and weekly email digests with actionable messages—making it easy to reschedule the focus time right from your inbox and maintain your routine.

Email digest shows your week in review, calling out number of days with booked focus time. Also helps plan the next two weeks, highlighting days with no focus times or conflicts.

Make time for outstanding tasks

To help you set aside time for pressing tasks—tasks you promised to complete for coworkers and tasks they asked you to get done—new inline suggestions and adaptive cards in email digests will be introduced in Outlook. These will use AI to surface outstanding tasks from emails, making it seamless for you to reserve focus time for them.

Inline suggestion in Outlook highlights an outstanding task for the person user received an email from. User adds the task to an upcoming focus time slot.

Work uninterrupted during focus time

Information worker studies find it takes an average of around 23 minutes to return to your original task after interruptions or self-distractions. To help limit these when you are trying to get deep, meaningful work done, Microsoft Teams will automatically switch to “Do Not Disturb” during focus time. Your status will be set to “Focus” and you will only get notifications for messages that are urgent or from contacts with priority access during focus time.

A notification indicates focus time has begun. Teams automatically enters “Do not disturb” state and shows the user’s status set as “Focus.”

We’re on a journey at Microsoft to build technologies that empower you to do your best work. Visit the new MyAnalytics personal dashboard and check out the weekly email digests—generally available today. They can help you better understand your current work patterns and get actionable insights to prioritize focus, disconnect and recharge, keep up with important contacts and relationships, and improve team collaboration.

Stay tuned in the coming months for the preview of focus plan to Microsoft 365 and Office 365 Enterprise customers who have MyAnalytics as part of the E5 plan, as an add-on to E1 and E3, or with Workplace Analytics. Over time, focus plan will become available with additional plans that have business hosted email (Exchange Online).

Posted on Leave a comment

Setting HTTP header attributes to enable Azure authentication/authorization using HTTPRepl

Angelos Petropoulos

Angelos

Posted on behalf of Ahmed Metwally

The HTTP Read-Eval-Print Loop (REPL) is a lightweight, cross-platform command-line tool that’s supported everywhere .NET Core is supported. It’s used for making HTTP requests to test ASP.NET Core web APIs and view their results. You can use the HTTPRepl to navigate and interrogate any API in the same manner that you would navigate a set of folders on a file system. If the service that you are testing has a swagger.json file, specifying that file to HTTPRepl will enable auto-completion.

To install the HTTP REPL, run the following command:

>dotnet tool install -g Microsoft.dotnet-httprepl


For more information on how to use HTTPRepl, read Angelos’ post on the ASP.NET blog. As we continue to improve the tool, we look to add new commands to facilitate the use of HTTPRepl with different types of secure API services. As of this release, HTTPRepl supports authentication and authorization schemes achievable through header manipulation, like basic, bearer token, and digest authentication. For example, to use a bearer token to authenticate to a service, use the command “set header”. Set the “Authorization” header to the bearer token value using the following command:

>set header Authorization “bearer <token_value>”

And replace <token_value> with your authorization bearer token for the service. Don’t forget to use the quotation marks to wrap the word bearer along with the <token_value> in the same literal string. Otherwise, the tool will treat them as two different values and will fail to set the header properly. To ensure that the header in the HTTP request is being formatted as expected, enable echoing using the “echo on” command.

Using the “set header” command, you can leverage HTTPRepl to test and navigate any secure REST API service including your Azure-hosted API services or the Azure Management API. To access a secure service hosted on Azure, you need a bearer token. Get a bearer token for your Azure subscription, using the Azure CLI to get an access token for the required Azure subscription:

>az login

Copy your subscription ID from the Azure portal and paste it in the “az account set” command:

>az account set --subscription "<subscription ID>" >az account get-access-token { "accessToken": "<access_token_will_be_displayed_here>", "expiresOn": "<expiry date/time will be displayed here>", "subscription": "<subscription ID>", "tenant": "<tenant ID>", "tokenType": "Bearer" } 

Copy the text that appears in place of <access_token_will_be_displayed_here>. This is your access token. Finally, run HTTPRepl:

>httprepl
(disconnected)~ connect https://management.azure.com
Using a base address of https://management.azure.com/
Unable to find a swagger definition
https://management.azure.com/~ set header Authorization "bearer <em>&lt;paste_token_here&gt;</em>"
https://management.azure.com/~ cd subscriptions
https://management.azure.com/subscriptions/~ cd <subscription_ID>

For example, to search for a list of your Azure app services, issue the “get” command for the list of sites through the Microsoft web provider:

 https://management.azure.com/subscriptions/<subscription_ID>/~ get providers/Microsoft.Web/sites?api-version=2016-08-01 HTTP/1.1 200 OK Cache-Control: no-cache Content-Length: 35948 Content-Type: application/json; charset=utf-8 Date: Thu, 19 Sep 2019 23:04:03 GMT Expires: -1 Pragma: no-cache Strict-Transport-Security: max-age=31536000; includeSubDomains X-Content-Type-Options: nosniff x-ms-correlation-request-id: <em>xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</em> x-ms-original-request-ids: <em>xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx;xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</em> x-ms-ratelimit-remaining-subscription-reads: 11999 x-ms-request-id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx x-ms-routing-request-id: WESTUS:xxxxxxxxxxxxxxxx:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx { "value": [
<list of azure resources> ] } https://management.azure.com/subscriptions/<subscription_ID>/~

You can use the full list of Azure REST APIs to browse and manage services in your Azure subscriptions. For more details on how HTTPRepl works, please check the ASPNET blog. To use HTTPRepl, download and install the global tool from the .NET Core CLI.

Give us feedback

It’s not HTTPie, it’s not Curl, but it’s also not PostMan. It’s something that you run and stays running and its aware of its current context. We find this experience valuable, but ultimately what matters the most is what you think. Please let us know your opinion by leaving comments below or on GitHub.


Ahmed Metwally, Sr. Program Manager, .NET dev tools @ahmedMsftAhmed is a Program Manager on the .NET tooling team focused on improving web development for .NET developers.

Angelos Petropoulos

Posted on Leave a comment

Microsoft Redmond campus modernization – Construction update

Since we kicked off demolition in January 2019, there has been great progress on the Redmond campus modernization project. Check out the timelapse below to see some of the work that has been done thus far.

Credit: Skycatch

Here are some other fun facts about the construction efforts:

  • The square footage of the building demolition on east campus is equivalent to the total square feet of all thirty NFL football fields combined.
  • Concrete from the demolition would be enough to build 1.3 Empire State Buildings. One hundred percent of the concrete is being recycled, and some of it will come back to the site for use in the new campus.
  • We’ve recycled a variety of materials from the deconstructed buildings including carpets, ceiling tiles, outdoor lights and turf from the sports fields. As a result, we have diverted almost 95 percent of our demolition waste away from landfills.
  • The resources recycled from the demolition thus far includes 449,697 pounds (50 trucks full) of carpet and 284,400 pounds of ceiling tiles.
  • The majority of the furniture removed from the demolished buildings that will not be reused in other buildings, has been donated to local charities and nonprofit startups.
  • We’ve moved 1 million cubic yards of dirt and reached the bottom of the digging area for our underground parking facility, which will consolidate traffic and make our campus even more pedestrian and bike friendly.
  • We‘ve installed 51k feet of fiber optic cabling.  That’s just over 9.5 miles.
  • The Microsoft Art Program has relocated 277 art pieces, including an early Chihuly and a Ken Bortolazzo sculpture. These art pieces were placed across our Puget Sound buildings so they can continue to be enjoyed by employees and guests.
  • The drone video featured above, created by Skycatch, not only offers a unique view of the project, but the images have fed into 3D models of the site which are providing data to more effectively tackle challenges as they arise, plan ahead and monitor construction progress.
  • The project is actively coordinating over 100 different building information models containing over 2.8 million individual 3D building components.

We look forward to continuing this journey to modernize Microsoft’s workplaces. When completed, the project will provide additional proximity for teams who collaborate and an inspiring, healthy and sustainably responsible workplace where our employees can do their best work and grow their careers.

Continued thanks for your patience and flexibility during the construction phase. As a reminder, please allow extra time to get around campus and remind visitors to do the same. Always be cautious around the construction sites and remain mindful of safety notices and instructions.

Follow updates and developments as this project progresses and view the latest renderings on Microsoft’s Modern Campus site.

Posted on Leave a comment

We’re opening a flagship store in the UK because London is hard to beat, says top Microsoft executive Chris Capossela

Microsoft chose to open its first European flagship store in London because the city is “hard to beat,” one of the company’s top executives has revealed.

Chris Capossela, Chief Marketing Officer, visited the store with UK CEO Cindy Rose ahead of its launch on July 11, and he said there were “very few locations in the world” that are as appealing as the UK capital.

The first physical retail store for Microsoft in the UK is located on Oxford Circus and covers 22,000 square feet over three floors.

Capossela (above) said it contains many one-of-a-kind features, including a full-sized McLaren Senna sports car that doubles as a Forza Motorsport 7 experience, a Gaming Lounge, a Community Theatre featuring free workshops all-year-round and an entire floor dedicated to helping businesses and organisations use technology.

“Around 86 million people pass through Oxford Circus every year,” he said. “That’s hard to beat. London is also an incredibly diverse city, so we can serve lots of different customers here; it’s a very pan-European city.

<img data-attachment-id="75143" data-permalink="https://news.microsoft.com/en-gb/2019/07/10/were-opening-a-flagship-store-in-the-uk-because-london-is-hard-to-beat-says-top-microsoft-executive-chris-capossela/photo-tom-pilston/" data-orig-file="http://www.sickgaming.net/blog/wp-content/uploads/2019/07/were-opening-a-flagship-store-in-the-uk-because-london-is-hard-to-beat-says-top-microsoft-executive-chris-capossela.jpg" data-orig-size="5578,3719" data-comments-opened="1" data-image-meta="{"aperture":"7.1","credit":"Tom Pilston","camera":"Canon EOS 5D Mark III","caption":"Photo Tom Pilston.","created_timestamp":"1562573066","copyright":"Tom Pilston ,tompilston.com ,00447802 572 609 tompilston.com","focal_length":"25","iso":"800","shutter_speed":"0.0125","title":"Photo Tom Pilston.","orientation":"1"}" data-image-title data-image-description="

A girl uses a Microsoft Surface device in the Flagship London Store

” data-medium-file=”http://www.sickgaming.net/blog/wp-content/uploads/2019/07/were-opening-a-flagship-store-in-the-uk-because-london-is-hard-to-beat-says-top-microsoft-executive-chris-capossela-3.jpg” data-large-file=”http://www.sickgaming.net/blog/wp-content/uploads/2019/07/were-opening-a-flagship-store-in-the-uk-because-london-is-hard-to-beat-says-top-microsoft-executive-chris-capossela.jpg” class=”size-full wp-image-75143″ src=”http://www.sickgaming.net/blog/wp-content/uploads/2019/07/were-opening-a-flagship-store-in-the-uk-because-london-is-hard-to-beat-says-top-microsoft-executive-chris-capossela.jpg” alt=”A girl uses a Microsoft Surface device in the Flagship London Store” width=”5578″ height=”3719″ srcset=”http://www.sickgaming.net/blog/wp-content/uploads/2019/07/were-opening-a-flagship-store-in-the-uk-because-london-is-hard-to-beat-says-top-microsoft-executive-chris-capossela.jpg 5578w, http://www.sickgaming.net/blog/wp-content/uploads/2019/07/were-opening-a-flagship-store-in-the-uk-because-london-is-hard-to-beat-says-top-microsoft-executive-chris-capossela-3.jpg 300w, http://www.sickgaming.net/blog/wp-content/uploads/2019/07/were-opening-a-flagship-store-in-the-uk-because-london-is-hard-to-beat-says-top-microsoft-executive-chris-capossela-4.jpg 768w, http://www.sickgaming.net/blog/wp-content/uploads/2019/07/were-opening-a-flagship-store-in-the-uk-because-london-is-hard-to-beat-says-top-microsoft-executive-chris-capossela-5.jpg 960w” sizes=”(max-width: 5578px) 100vw, 5578px”>

A girl uses a Microsoft Surface device in the Flagship London Store

“There are very few locations in the world that feature all the different parts that make up what Microsoft is. The early adoption of technology in the UK has been very impressive. That’s important when the company is thinking about what investments to make and where to make them. This flagship would not be in London if we didn’t have a very strong commercial business in this country. We thought very deeply about this.”

The central London flagship store has a modern feel, with lots of space and wood and glass surfaces. Visitors will be greeted on the ground floor by a large video wall and Surface devices on tables, with the McLaren on their right and the HoloLens mixed-reality headset to their left. A wooden spiral staircase or lifts will take them to the Gaming Lounge on the first floor, where they can play the latest Xbox and PC titles in high-quality gaming chairs and professional pods, purchase third-party laptops and accessories and get tech support, trainings, repairs and advice from the Answer Desk. All visitors can create their own personalised Surface Type Cover with Surface Design Lab, featuring a range of designs that can be etched directly onto the cover. They can also take photos in the Selfie Area.

The enterprise area on the second floor is a place to support, train and grow businesses no matter where they are on their digital transformation journey. From small companies and educational institutions to enterprise customers, the Product Advisors and Cloud Technical Experts will help customers discover, deploy and use Microsoft 365 and other resources to solve business challenges such as AI, data security, collaboration and workplace efficiencies. This floor also contains an area for hosting events, as well as meeting rooms and a Showcase space for demonstrating how customers, including Carlsberg and Toyota, are digitally transforming.

<img data-attachment-id="75146" data-permalink="https://news.microsoft.com/en-gb/2019/07/10/were-opening-a-flagship-store-in-the-uk-because-london-is-hard-to-beat-says-top-microsoft-executive-chris-capossela/photo-tom-pilston-2/" data-orig-file="http://www.sickgaming.net/blog/wp-content/uploads/2019/07/were-opening-a-flagship-store-in-the-uk-because-london-is-hard-to-beat-says-top-microsoft-executive-chris-capossela-1.jpg" data-orig-size="5682,3646" data-comments-opened="1" data-image-meta="{"aperture":"6.3","credit":"Tom Pilston","camera":"Canon EOS 5D Mark III","caption":"Photo Tom Pilston.","created_timestamp":"1562575866","copyright":"Tom Pilston ,tompilston.com ,00447802 572 609 tompilston.com","focal_length":"34","iso":"800","shutter_speed":"0.005","title":"Photo Tom Pilston.","orientation":"1"}" data-image-title data-image-description="

Surface devices in Microsoft’s London Store

” data-medium-file=”http://www.sickgaming.net/blog/wp-content/uploads/2019/07/were-opening-a-flagship-store-in-the-uk-because-london-is-hard-to-beat-says-top-microsoft-executive-chris-capossela-6.jpg” data-large-file=”http://www.sickgaming.net/blog/wp-content/uploads/2019/07/were-opening-a-flagship-store-in-the-uk-because-london-is-hard-to-beat-says-top-microsoft-executive-chris-capossela-1.jpg” class=”size-full wp-image-75146″ src=”http://www.sickgaming.net/blog/wp-content/uploads/2019/07/were-opening-a-flagship-store-in-the-uk-because-london-is-hard-to-beat-says-top-microsoft-executive-chris-capossela-1.jpg” alt=”Surface devices in Microsoft’s London Store” width=”5682″ height=”3646″ srcset=”http://www.sickgaming.net/blog/wp-content/uploads/2019/07/were-opening-a-flagship-store-in-the-uk-because-london-is-hard-to-beat-says-top-microsoft-executive-chris-capossela-1.jpg 5682w, http://www.sickgaming.net/blog/wp-content/uploads/2019/07/were-opening-a-flagship-store-in-the-uk-because-london-is-hard-to-beat-says-top-microsoft-executive-chris-capossela-6.jpg 300w, http://www.sickgaming.net/blog/wp-content/uploads/2019/07/were-opening-a-flagship-store-in-the-uk-because-london-is-hard-to-beat-says-top-microsoft-executive-chris-capossela-7.jpg 768w” sizes=”(max-width: 5682px) 100vw, 5682px”>

Anyone buying a Surface at the Store can get a designed etched onto the cover

It is also the most accessible store Microsoft has ever opened, with buttons to open doors, lower desks to help those in wheelchairs and Xbox Adaptive Controllers available for gamers with restricted movement.

The 150 Store Associates welcoming visitors speak a total of 45 languages, and selected members of the team can also communicate in British Sign Language. John Carter, Senior Store Manager at the store, said the staff are a mix of ages, genders, ethnicities and abilities, and had all gone through six weeks of training to “deliver our customer-obsessed culture” from when the doors open at 11am on July 11.

Rose also announced that Microsoft is donating £1 million to three charities – UK Youth, Raspberry Pi Foundation and The London Community Foundation – to help them continue to teach digital skills to disadvantaged young people and to support grass-roots community groups in Westminster with digital and employability skills.

“I’m excited about this donation because it’s going to give these charities the opportunity to have even more of an impact across the UK. We are also auctioning 10 limited edition Surface devices designed by British retailer Liberty London, with all proceeds going to gaming charity SpecialEffect, which helped develop the Xbox Adaptive Controller.”

Cindy Rose, Microsoft UK CEO, with gamer Vivek Gohil
Cindy Rose, Microsoft UK CEO, with gamer Vivek Gohil

Talking about the journey to this week’s opening, she added: This has been a three-year labour of love for me. During my Microsoft job interview [in 2016] I remember discussing the need for a Microsoft retail store in London. That’s how long I’ve been thinking about this and planning it. I feel like that part of the jigsaw is now complete.

“What I love most about this flagship is that it’s so much more than just a shopping experience. It is a destination where we can engage with local community to bring our mission to life. Whether it’s teaching kids to code, training educators on how to use tech in the classroom, or showing small businesses and large enterprises how we can help digitally transform their organisation, this store will be the best place to experience all that’s possible with Microsoft.”

Capossela, who said it is “really important for us to have a place that people can walk into and experience Microsoft,” agreed that the store will appeal to every type of customer.

“I want all our stores to have a Microsoft vibe, be very colourful, human and approachable,” he said. “These are the things we want our brand to stand for. The London flagship has some special experiences. I feel very lucky that we have found a space as good as Oxford Circus in London.”

Tags: , , , , ,

Posted on Leave a comment

Forwarded Headers Middleware Updates in .NET Core 3.0 preview 6

Avatar

With the ASP.NET Core 2.1 release, we included UseHsts and UseHttpRedirection by default. These methods put a site into an infinite loop if deployed to an Azure Linux App Service, Azure Linux virtual machine (VM), or behind any other reverse proxy besides IIS. TLS is terminated by the reverse proxy, and Kestrel isn’t made aware of the correct request scheme.

OAuth and OIDC also fail in this configuration because they generate incorrect redirects. Calls to UseIISIntegration add and configure forwarded headers middleware when running behind IIS, but there’s no matching automatic configuration for Linux (Apache or Nginx integration). The fix for this issue is discussed in more detail in the doc article Forward the scheme for Linux and non-IIS reverse proxies.

Configuration-only Wire-up in Preview 6

With the updates in .NET Core 3 preview 6, you no longer need to call the middleware explicitly, as the host logic has been pre-wired to enable the Forwarded Headers Middleware by default as long as the ASPNETCORE_FORWARDEDHEADERS_ENABLED environment variable has been set to true. Turning on the Forwarded Headers Middleware is as simple as setting the ASPNETCORE_FORWARDEDHEADERS_ENABLED setting in the Azure Portal’s configuration blade for any App Service running on Linux or in a container.

Enabling the Forwarded Headers Middleware via config

Once this setting is set to true, the middleware starts working, and features dependent on Request.IsHttps resulting to true begin to function as expected.

Resolving the issue with ASP.NET Core 2.x Apps Today

If you’re currently building an ASP.NET Core 2.x app and want to run it on App Service for Linux now, there’s a workaround that will be future-proof when the updates come out for 3.0.

To forward the scheme from the proxy in non-IIS scenarios, add and configure Forwarded Headers Middleware. In Startup.cs, use the following code:

// using Microsoft.AspNetCore.HttpOverrides; public void ConfigureServices(IServiceCollection services)
{ if (string.Equals( Environment.GetEnvironmentVariable("ASPNETCORE_FORWARDEDHEADERS_ENABLED"), "true", StringComparison.OrdinalIgnoreCase)) { services.Configure<forwardedheadersoptions>(options => { options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto; // Only loopback proxies are allowed by default. // Clear that restriction because forwarders are enabled by explicit // configuration. options.KnownNetworks.Clear(); options.KnownProxies.Clear(); }); }
} public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{ app.UseForwardedHeaders();
}

If you enable your ASP.NET Core 2.x apps with this workaround today, when you’re ready to upgrade to 3.0, you’ll already have the right configuration setting in place.

Base Image Update

The base images used by the App Service team to streamline the creation of ASP.NET Core apps will soon be updated so that the ASPNETCORE_FORWARDEDHEADERS_ENABLED environment variable will be set to true. Once they’re updated, you won’t even need to explicitly set the environment variable; it’ll be enabled by default.

Try it Out

If you’re new to building ASP.NET Core apps using containers, the App Service options for Linux and Container-based hosting offer a great place to get started. The docs are loaded with guidance and examples, from how to Run a .NET Core app in App Service on Linux to accessing a SQL Server Database from an ASP.NET Core app running in App Service Linux.

Avatar
Brady Gaster

Senior Program Manager, ASP.NET Core

Follow    

Posted on Leave a comment

Microsoft at MWC Barcelona: Introducing Microsoft HoloLens 2

This evening at a press event to kickoff MWC Barcelona, I had the pleasure of joining CEO Satya Nadella and Technical Fellow Alex Kipman onstage to talk in depth about Microsoft’s worldview for the intelligent cloud and intelligent edge.

As part of today’s press event, we also introduced the world to HoloLens 2.

YouTube Video

This is a tremendously exciting time for Microsoft, our partners, our customers, the computing industry and indeed the world. The virtually limitless computing power and capability of the cloud combined with increasingly intelligent and perceptive edge devices embedded throughout the physical world create experiences we could only imagine a few short years ago.

When intelligent cloud and intelligent edge experiences are infused with mixed reality, we have a framework for achieving amazing things and empowering even more people.

Today represents an important milestone for Microsoft. This moment captures the very best efforts and passion of numerous teams spanning Azure, HoloLens, Dynamics 365 and Microsoft Devices — this truly is a moment where the sum is greater than the parts. From cutting-edge hardware design to mixed reality-infused cloud services, today’s announcements represent the collective work of many teams. And none of this would be possible without our passionate community of customers, partners and developers.

On behalf of everyone on the team, it is my privilege to introduce you to HoloLens 2 and all the announcements we made today to kick off MWC Barcelona.

Introducing HoloLens 2

Side view of sleek black HoloLens 2

Since the release of HoloLens in 2016 we have seen mixed reality transform the way work gets done. We have unlocked super-powers for hundreds of thousands of people who go to work every day. From construction sites to factory floors, from operating rooms to classrooms, HoloLens is changing how we work, learn, communicate and get things done.

We are entering a new era of computing, one in which the digital world goes beyond two-dimensional screens and enters the three-dimensional world. This new collaborative computing era will empower us all to achieve more, break boundaries and work together with greater ease and immediacy in 3D.

Today, we are proud to introduce the world to Microsoft HoloLens 2.

Our customers asked us to focus on three key areas to make HoloLens even better. They wanted HoloLens 2 to be even more immersive and more comfortable, and to accelerate the time-to-value.

Immersion is greatly enhanced by advancements across the board, including in the visual display system, making holograms even more vibrant and realistic. We have more than doubled the field of view in HoloLens 2, while maintaining the industry-leading holographic density of 47 pixels per degree of sight. HoloLens 2 contains a new display system that enables us to achieve these significant advances in performance at low power. We have also completely refreshed the way you interact with holograms in HoloLens 2. Taking advantage of our new time-of-flight depth sensor, combined with built-in AI and semantic understanding, HoloLens 2 enables direct manipulation of holograms with the same instinctual interactions you’d use with physical objects in the real world. In addition to the improvements in the display engine and direct manipulation of holograms, HoloLens 2 contains eye-tracking sensors that make interacting with holograms even more natural. You can log in with Windows Hello enterprise-grade authentication through iris recognition, making it easy for multiple people to quickly and securely share the device.

Comfort is enhanced by a more balanced center of gravity, the use of light carbon-fiber material and a new mechanism for donning the device without readjusting. We’ve improved the thermal management with new vapor chamber technology and accounted for the wide physiological variability in the size and shape of human heads by designing HoloLens 2 to comfortably adjust and fit almost anyone. The new dial-in fit system makes it comfortable to wear for hours on end, and you can keep your glasses on because HoloLens 2 adapts to you by sliding right over them. When it’s time to step out of mixed reality, flip the visor up and switch tasks in seconds. Together, these enhancements have more than tripled the measured comfort and ergonomics of the device.

Time-to-value is accelerated by Microsoft mixed reality applications like Dynamics 365 Remote Assist, Dynamics 365 Layout and the new Dynamics 365 Guides applications. In addition to the in-box value, our ecosystem of mixed reality partners provides a broad range of offerings built on HoloLens that deliver value across a range of industries and use cases. This partner ecosystem is being supplemented by a new wave of mixed reality entrepreneurs who are realizing the potential of devices like HoloLens 2 and the Azure services that give them the spatial, speech and vision intelligence needed for mixed reality, plus battle-tested cloud services for storage, security and application insights.

Building on the unique capabilities of the original HoloLens, HoloLens 2 is the ultimate intelligent edge device. And when coupled with existing and new Azure services, HoloLens 2 becomes even more capable, right out of the box.

HoloLens 2 will be available this year at a price of $3,500. Bundles including Dynamics 365 Remote Assist start at $125/month. HoloLens 2 will be initially available in the United States, Japan, China, Germany, Canada, United Kingdom, Ireland, France, Australia and New Zealand. Customers can preorder HoloLens 2 starting today at https://www.microsoft.com/en-us/hololens/buy.

In addition to HoloLens 2, we were also excited to make the following announcements at MWC Barcelona.

 Azure Kinect Developer Kit (DK)

Front and side view of compact silver Azure Kinect DK device

The Azure Kinect DK is a developer kit that combines our industry-leading AI sensors in a single device. At its core is the time-of-flight depth sensor we developed for HoloLens 2, high-def RGB camera and a 7-microphone circular array that will enable development of advanced computer vision and speech solutions with Azure. It enables solutions that don’t just sense but understand the world — people, places, things around it. A good example of such a solution in the healthcare space is Ocuvera, which is using this technology to prevent patients from falling in hospitals. Every year in the U.S. alone, over 1 million hospital patients fall each year, and 11,000 of those falls are fatal. With Azure Kinect, the environmental precursors to a fall can be determined and a nurse notified to get to patients before they fall. Initially available in the U.S. and China, the Azure Kinect DK is available for preorder today at $399. Visit Azure.com/Kinect for more info.

Dynamics 365 Guides

When we announced Dynamics 365 Remote Assist and Dynamics 365 Layout on October 1, we talked about them as the “first” of our mixed reality applications for HoloLens.

Today, we are proud to announce our latest offering: Microsoft Dynamics 365 Guides.

Dynamics 365 Guides is a new mixed reality app that empowers employees to learn by doing. Guides enhances learning with step-by-step instructions that guide employees to the tools and parts they need and how to use them in real work situations. In addition to the experience of using Guides on HoloLens, a Guides PC app makes it easy to create interactive content, attach photos and videos, import 3D models and customize training to turn institutional knowledge into a repeatable learning tool.

This application will help minimize downtime and increase efficiency for mission-critical equipment and processes and becomes the third Dynamics 365 application that will work on both the previous generation of HoloLens and the new HoloLens 2.

Dynamics 365 Guides is available in preview starting today.

Man wearing HoloLens 2 consults a hologram of a guide as he works on machinery

Azure Mixed Reality Services

Today we also announced two new Azure mixed reality services. These services are designed to help every developer and every business build cross-platform, contextual and enterprise-grade mixed reality applications.

 Azure Spatial Anchors enables businesses and developers to create mixed reality apps that map, designate and recall precise points of interest that are accessible across HoloLens, iOS and Android devices. These precise points of interest enable a range of scenarios, from shared mixed reality experiences to wayfinding across connected places. We’re already seeing this service help our customers work and learn with greater speed and ease in manufacturing, architecture, medical education and more.

Azure Remote Rendering helps people experience 3D without compromise to fuel better, faster decisions. Today, to interact with high-quality 3D models on mobile devices and mixed reality headsets, you often need to “decimate,” or simplify, 3D models to run on target hardware. But in scenarios like design reviews and medical planning, every detail matters, and simplifying assets can result in a loss of important detail that is needed for key decisions. This service will render high-quality 3D content in the cloud and stream it to edge devices, all in real time, with every detail intact.

Azure Spatial Anchors is in public preview as of today. Azure Remote Rendering is now in private preview in advance of its public preview.

Microsoft HoloLens Customization Program

HoloLens is being used in a variety of challenging environments, from construction sites and operating rooms to the International Space Station. HoloLens has passed the basic impact tests from several protective eyewear standards used in North America and Europe. It has been tested and found to conform to the basic impact protection requirements of ANSI Z87.1, CSA Z94.3 and EN 166. With HoloLens 2 we’re introducing the Microsoft HoloLens Customization Program to enable customers and partners to customize HoloLens 2 to fit their environmental needs.

The first to take advantage of the HoloLens Customization Program is our long-standing HoloLens partner Trimble, which last year announced Trimble Connect for HoloLens along with a new hard hat solution that improves the utility of mixed reality for practical field applications. Today it announced the Trimble XR10 with Microsoft HoloLens 2, a new wearable hard hat device that enables workers in safety-controlled environments to access holographic information on the worksite.

Hard hat incorporates HoloLens 2

Open principles

Finally, as we closed things out, Alex Kipman articulated a set of principles around our open approach with the mixed reality ecosystem.

We believe that for an ecosystem to truly thrive there should be no barriers to innovation or customer choice.

To that end, Alex described how HoloLens embraces the principles of open stores, open browsers and open developer platforms.

To illustrate our dedication to these principles, we announced that our friends at Mozilla are bringing a prototype of the Firefox Reality browser to HoloLens 2, demonstrating our commitment to openness and the immersive web. Alex was also joined by Tim Sweeney, founder and CEO of Epic Games, who announced that Unreal Engine 4 support is coming to HoloLens.

In the coming months we will have more announcements and details to share. We look forward to continuing this journey with you all.

Julia

Posted on Leave a comment

Microsoft unveils details of London flagship store

This first physical retail store for Microsoft in the U.K. will open to the general public on July 11, joining other world-class Microsoft Store locations all over the world, including flagships in New York and Sydney and stores across the U.S., Canada and Puerto Rico and online in more than 190 countries.

This store is the latest step in our almost 40-year investment in the U.K., including recently doubling the size of Microsoft’s Azure regions to help more organizations digitally transform. We’re also committed to supporting the growth of digital skills in the U.K. in partnership with computing education and youth communities.

The flagship Microsoft Store in London will be located on Oxford Circus and covers 21,932 square feet over three floors. It will feature an Answer Desk, offering a dedicated area for customers to get tech support, trainings, repairs and advice from trusted advisors on Microsoft products and services, no matter where the device was purchased, the brand or operating system. A community theater, a space for tech, coding and STEM learning, will run free, year-round workshops and programs for customers. So if you are a business owner looking for the latest tech to grow your business, a gamer who wants to join a community or show your skills in a tournament, a student wanting to brush up on coding or a teacher looking to bring Minecraft alive in the classroom, customers of all ages and abilities will be able to learn and develop their digital skills.

Those who work, live, shop in or visit the U.K. will also be able to test and experience the latest technology, products and services from Microsoft and its partners. Interactive zones, surrounded by immersive video walls running throughout the store will make this the best place to get hands-on with Surface, Windows, Office, Xbox and PC gaming, HoloLens mixed-reality and more.

The site also adds to the growing list of innovative facilities Microsoft runs in the region, including three gaming studios, the start-up hub Reactor London and the global center of excellence for the development of artificial intelligence and other computing disciplines in the Microsoft Research Lab in Cambridge.

Designed to build connections with the local community, customers and businesses, this store represents a unique way to deliver on our mission to empower every person and organization on the planet to achieve more. A flagship store in London has long been part of our vision for our physical and digital store presence, and this opening represents another step in our journey to meet our customers – from consumers to businesses – wherever they are and deepen our connection with them. London is one of the world’s most exciting shopping destinations, and we look forward to empowering customers to explore all that is possible with Microsoft.

For more information and to keep up to date with the latest information on the U.K. store opening, please follow us @MicrosoftStoreUK on Instagram and Facebook and visit us online at www.microsoft.com.

Tags: , , ,