Today, we are excited to announce the release of Visual Studio 2013 Update 3 and Azure SDK 2.4 for .NET. This post describes the new tooling features for Azure development enabled by these releases.
Visual Studio Update 3 [download]
- Websites: Publish WebJobs from Console or Web projects.
- Mobile Services: Create a Dev/Test environment in the cloud when creating Mobile Services projects. Use the Push Notification Wizard with .NET Mobile Services.
- Notification Hubs: View and manage device registrations.
With the additional install of the Azure SDK 2.4 for .NET, you can also take advantage of the following features:
- Virtual Machines: Remote debug 32-bit Virtual Machines. Configure Virtual Machines, including installation & configuration of dynamic extensions (e.g. anti-malware, Puppet, Chef and custom script). Create Virtual Machine snapshots of the disk state.
- Storage: View Storage activity logs for diagnostics. Provision Read-Access Geo-redundant Storage from Visual Studio.
- Cloud Services: Emulator Express is the default option for new projects (Full Emulator is deprecated). Configure new networking capabilities in the service model.
Websites: Publish WebJobs from Console Projects
In January, we added a feature called WebJobs that makes it really easy to take background code (programs or scripts) and run it within a Website. Until today, publishing a WebJob required you to either use the portal or Azure PowerShell. With today’s release, you can alternatively publish your WebJobs from right within Visual Studio.
To get started, open an existing Console project or create new one:
Implement your Main method. While not required, you can use the Microsoft Azure WebJobs SDK. The SDK, available as a NuGet package, makes it especially easy to integrate Azure Storage and trigger a function in your program when items are added to Queues, Blobs or Tables.
When you are ready to publish your project to Azure, select your project, right click and choose the Publish as Azure WebJob command.
You will then see a screen for configuring the WebJob and choosing how you want to run it: Run Continuously, Run on a Schedule, or Run on Demand.
If you choose the continuous option, make sure your code is written to run in an endless loop. Once you select OK, you will see the Publish Web dialog where you choose which Website to publish to. You can deploy your WebJob as part of an existing Website, or you can create a new Website.
Finally, open the Azure portal and navigate to the Website that contains your WebJob. Select the WebJobs tab, and you will see helpful information about your WebJob. This includes a link to a dashboard for viewing logs and monitoring status.
Websites: Publish WebJobs from Web Projects
Instead of publishing your WebJobs one at a time, we also make it easy to publish your WebJobs as part of publishing your Azure Website. This way, it is just one step to publish your Website and all related WebJobs. Right-click your Web Project, and choose Add->New Azure WebJob Project or Add->Existing Project as Azure WebJob to associate new or existing Console projects.
Now when you select Publish to publish your project to an Azure Website, the associated WebJobs will be deployed as well.
Mobile Services: Push Notification Wizard for .NET Mobile Services
With Visual Studio 2013 Update 3, we’ve added support for .NET Mobile Services in the Push Notification Wizard, making it easier for you to add push notifications to your Windows Phone and Windows Store applications. The Wizard will help register your client for push notifications and then provide you with sample backend logic to send push notifications. To invoke the wizard, select your project, right click and choose the Add -> Push Notification command.
Mobile Services: Provision Mobile Services during Project Creation
Now as you create your project, you can also create a Mobile Service to accompany it that can be used as a Dev/Test environment. As you develop your project, you can quickly publish it to the accompanying mobile service to test your code against the live service. To provision a new mobile service simply select the checkbox to Host in the cloud in the New ASP.NET Project dialog.
Notification Hubs: View and Manage Device Registrations
Notifications Hubs already has support for sending test notifications to your devices (Windows Phone, Windows Store, iOS, Android, or Kindle Fire). In Visual Studio Update 3, we’ve added more tooling to enable you to view your device registrations, edit tags, and delete registrations. In addition, we also provide a registration count by platform to provide a quick summary view. To access the notifications hubs tooling, find the Notifications Hubs node in Server Explorer, right click, and choose Diagnose.
Virtual Machines: Configuration
In the 2.4 release of the Azure SDK, we continue to improve our support for using IaaS virtual machines from Visual Studio. Whether you’re building services that run on Azure virtual machines or using virtual machines to host your development or test environments, you’ll find the tools in Visual Studio make your job easier.
In this release when using Server Explorer you’ll now notice a Configure option on the context menu for Virtual Machines. Click Configure to open a virtual machine configuration window where you can view and edit properties of the VM as well as the endpoint, extension and disk configuration for that VM. You can also perform operations such as Start, Shutdown, Connect and Capture (more on that later) from the VM Configuration window.
The VM Configuration window also allows you to open multiple VMs at once so that you can easily compare one configuration to another.
To add an endpoint, choose the type of endpoint from the list of available endpoints then click Add. Once the endpoint is added, you can change the name and/or ports to suite your needs. Click Update to apply the changes to the VM.
Similarly you can add or configure extensions on a virtual machine from the configuration window. Virtual Machine extensions are software components that extend the VM functionality and simplify various VM management operations like getting the VM into a desired state or running the latest anti-malware on the VM. See the blog post on VM Extensions for more info. To add an extension just choose the extension from the list of available extensions and click Add. If you add an extension by mistake you can remove it if you have not yet clicked Update.
Depending on the type of extension being added you may also need to provide configuration, you can do this by selecting the extension and clicking Configure. The format and schema of the extension configuration is defined by the extension publisher. You can find more information on configuring extensions by clicking the link at the bottom of the configuration dialog.
From the extension configuration dialog you can supply both the public and the private configuration. The public configuration can be read and updated as necessary. The private configuration is write-only. Once you apply the private configuration, it can only be read by the extension. It cannot be retrieved from Visual Studio, the portal or any other tools. The extension publisher may choose to have sensitive information such as password stored in private configuration.
Virtual Machines: Snapshots
Snapshots provide an easy way to capture a VM image that can be used to create replicas of the same VM. Imagine you have a virtual machine that is configured exactly the way you like; you may have installed new services, configured the firewall, and attached data disks to suite your needs. That’s a good time to create a VM image so that you can use the customized VM to create replicas in the future.
To create a VM Image click on the Capture Image button in the VM configuration window. This will bring up a dialog that allows you to provide an image label and description for your VM image. For a Windows VM you must run Sysprep on the VM to create a generalized VM image. Sysprep will remove any system specific information from Windows so that it can be easily reused as a template for new VMs. If you have run Sysprep you can select the checkbox for I have run Sysprep on the virtual machine and click the Capture button to capture the VM image.
Once you have captured a VM image you can create new virtual machines based on that image snapshot. Select the Create Virtual Machine option from the context menu on the Virtual Machines node in Server Explorer to bring up the Create New Virtual Machine wizard. On the Select Image page of the wizard set the Image Type dropdown to Private Images – VM Images to display your captured VM images.
You can continue with the next pages of the wizard to provide additional information about the new VM like Machine Settings, Cloud Service and Endpoints. Once finished configuring the endpoints you can click Create to create a new virtual machine based on the VM Image you captured.
Virtual Machines: Remote Debugging for 32-bit Virtual Machines
Visual Studio now supports remote debugging of 32-bit applications running on Azure Virtual Machines. You can enable debugging on a specific instance of a virtual machine from the context menu in Server Explorer.
Storage: Provision Read-Access Geo-Redundant Storage from Visual Studio
Read-Access Geo-Redundant Storage (RA-GRS) allows you to have higher read availability for your storage account by providing “read only” access to the data replicated to the secondary location. You can now select RA-GRS as a redundancy option for your storage when creating a storage account from Visual Studio.
Storage: View Storage Activity Logs
Azure Storage logging provides a trace of executed requests against your storage account which can be used for diagnostics. If logging is enabled for blob containers, tables, or queues, the logs will appear in the $logs blob container. Similarly, the $metrics tables contain information on capacity for blob containers, and on transactions for blobs containers, queues, and tables. You now have the ability to view the $logs blob container and $metrics tables directly from Server Explorer in Visual Studio.
Cloud Services: Emulator Express as Default; Deprecation of Full Compute Emulator
We launched Emulator Express to address the longstanding customer ask to be able to test multi-role Cloud Services locally without requiring administrator privileges. This has since become the primary Compute emulator used by our customers for new projects. To focus our future investments on a single code base, we are deprecating the Full Emulator in favor of Emulator Express.
New Cloud Services projects in SDK 2.4 will use Emulator Express by default. Do note, however, that Emulator Express is limited to one instance per role.
Cloud Services: New Networking Capabilities in the Service Model
The following capabilities have been available in IaaS via PowerShell. With today’s SDK 2.4 release they are now available for Cloud Services (Web and worker roles), via the service model.
Internal Load Balancing (ILB)
ILB enables users to run highly available services that are accessible only within a trust boundary, in this case the Cloud Service. The internal load balancer settings are defined at a deployment level in the service model.
The .cscfg has a deployment-wide NetworkConfiguration section that has been extended to contain load balancer information:
<NetworkConfiguration> … <LoadBalancers> <LoadBalancer name="name"> <FrontendIpConfiguration type="private" subnet="subnet-name" staticVirtualNetworkIPAddress="static-IP-address"/> </LoadBalancer> </LoadBalancers> </NetworkConfiguration>
An internal load balancer is then referenced in the endpoint definition in the .csdef. Referencing an ILB is only supported for InputEndpoints. Referencing ILBs is supported for all role types (worker role and Web role).
<WorkerRole name="worker-role-name" vmsize="worker-role-size" enableNativeCodeExecution="[true|false]"> … <Endpoints> <InputEndpoint name="input-endpoint-name" protocol="[http|https|tcp|udp]" localPort="local-port-number" port="port-number" certificate="certificate-name" loadBalancerProbe="load-balancer-probe-name" loadBalancer="load-balancer-name" /> </Endpoints> </WorkerRole>
Public IP addresses for virtual machines and role instances
Users are now able to obtain public facing, external IPs for their role instances. Any traffic on these public IP addresses, on any port, will be directed to the specified VM or role instance.
The instance level Public IPs are defined at a deployment level in the service model. The external IPs to all instances in a role needs to be added to the CSCFG schema. Example:
<NetworkConfiguration> <VirtualNetworkSite name="VNet"/> <AddressAssignments> <InstanceAddress roleName="VMRolePersisted"> <PublicIPs> <PublicIP name="public-ip-name"/> </PublicIPs> </InstanceAddress> </AddressAssignments> </NetworkConfiguration>
This syntax is designed to support different types (IPv4, IPv6) and multiple public IP addresses in the future, but for now it is restricted to exactly one public IP address. The type of the IP address is inferred to be IPv4.
Configurable Idle Timeout for Azure Load Balancer
The Azure Load Balancer supports a configurable TCP idle timeout. You can now set it for a duration between 4 and 30 minutes for inbound connections, only. This configurable idle timeout period allows your application to maintain TCP connections for up to 30 minutes even if there is no activity on the connection.
Endpoint settings for Cloud Services are made in the .csdef. So, in order to update the TCP timeout for a Cloud Services deployment, a deployment upgrade is required. An exception is if the TCP timeout is only specified for a Public IP. Public IP settings are in the .cscfg, and they can be updated through deployment update and upgrade.
The .csdef changes for endpoint settings are:
<WorkerRole name="worker-role-name" vmsize="worker-role-size" enableNativeCodeExecution="[true|false]"> <Endpoints> <InputEndpoint name="input-endpoint-name" protocol="[http|https|tcp|udp]" localPort="local-port-number" port="port-number" certificate="certificate-name" loadBalancerProbe="load-balancer-probe-name" idleTimeoutInMinutes="tcp-timeout" /> </Endpoints> </WorkerRole>
The .cscfg changes for the timeout setting on Public IPs are:
<NetworkConfiguration> <VirtualNetworkSite name="VNet"/> <AddressAssignments> <InstanceAddress roleName="VMRolePersisted"> <PublicIPs> <PublicIP name="public-ip-name" idleTimeoutInMinutes="timeout-in-minutes"/> </PublicIPs> </InstanceAddress> </AddressAssignments> </NetworkConfiguration>
Visual Studio 2013 Update 3 and the Azure SDK 2.4 make it easier than ever to get started developing rich cloud applications. Along with the Azure Developer Center’s growing set of .NET developer resources, today’s releases should make your development experience more enjoyable and efficient.
If you don’t already have an Azure account, you can sign-up for a free trial and start using all of the above features today. Then visit the Azure Developer Center to learn more about how to build apps with it.
This blog article is a collaboration of multiple people. Big thanks to Saurabh Bhatia, and the Azure Cloud Tools team for their contributions.