{"id":2011,"date":"2014-12-10T12:16:00","date_gmt":"2014-12-10T12:16:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/cesardelatorre\/2014\/12\/10\/myshuttle-biz-azure-backend-services-and-lob-integration-to-o365-and-salesforce-powered-by-microsoft-azure-and-visual-studio-2015\/"},"modified":"2014-12-10T12:16:00","modified_gmt":"2014-12-10T12:16:00","slug":"myshuttle-biz-azure-backend-services-and-lob-integration-to-o365-and-salesforce-powered-by-microsoft-azure-and-visual-studio-2015","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/cesardelatorre\/myshuttle-biz-azure-backend-services-and-lob-integration-to-o365-and-salesforce-powered-by-microsoft-azure-and-visual-studio-2015\/","title":{"rendered":"MyShuttle.biz Azure backend services and LOB integration to O365 and Salesforce powered by Microsoft Azure and Visual Studio 2015"},"content":{"rendered":"<p>[**NEW!! &#8211; Updated on March 2015 &#8211; Compatible with VS 2015 CTP 6 **]<\/p>\n<p>This blog post (focusing on the Azure backend services for MyShuttle.biz mobile apps) is the fifth post of a blog posts series covering the different scenarios implemented by the MyShuttle.biz apps.<\/p>\n<p><em><a href=\"http:\/\/blogs.msdn.com\/b\/cesardelatorre\/archive\/2014\/11\/30\/myshuttle-biz-demo-apps-from-connect-visual-studio-and-azure-event.aspx\"><strong>1. Blog Post: Global Intro of the MyShuttle.biz demo apps from Connect(); Visual Studio and Azure event<\/strong><\/a><\/em><\/p>\n<p><em><a href=\"http:\/\/blogs.msdn.com\/b\/cesardelatorre\/archive\/2014\/11\/21\/myshuttle-biz-asp-net-5-demos.aspx\"><strong>2. Blog post: MyShuttle.biz ASP.NET 5 Web Apps and Services<\/strong><\/a><\/em><\/p>\n<p><em><a href=\"http:\/\/blogs.msdn.com\/b\/cesardelatorre\/archive\/2014\/11\/30\/myshuttle-biz-and-cross-platform-mobile-development-of-native-apps-for-ios-android-and-windows-with-net-and-xamarin.aspx\"><strong>3. Blog Post: MyShuttle.biz and Cross-platform Mobile Development of native apps for iOS, Android and Windows with .NET and Xamarin<\/strong><\/a><\/em><\/p>\n<p><em><a href=\"http:\/\/blogs.msdn.com\/b\/cesardelatorre\/archive\/2014\/11\/30\/myshuttle-biz-and-multi-device-development-of-hybrid-apps-for-ios-android-and-windows-with-visual-studio-tools-for-apache-cordova.aspx\"><strong>4. Blog Post: MyShuttle.biz and multi device development of hybrid apps for iOS, Android and Windows with Visual Studio Tools for Apache Cordova<\/strong><\/a><\/em><\/p>\n<p><em><strong><em><a href=\"http:\/\/blogs.msdn.com\/b\/cesardelatorre\/archive\/2014\/12\/10\/myshuttle-biz-azure-backend-services-and-lob-integration-to-o365-and-salesforce.aspx\"><strong>5. (Current post) Blog post: MyShuttle.biz Azure backend integration with LOB services (Invoicing, O365 API and SalesForce API)<\/strong><\/a><\/em><\/strong><\/em><\/p>\n<p>Myshuttle.biz mobile apps are not just isolated mobile apps. As you&rsquo;d guess, they are connected to an &ldquo;intelligent&rdquo; backend in order to handle persistent data and certain business logic based on services and a database.<\/p>\n<p>Most of the MyShuttle apps consume the same ASP.NET 5 Web API services that are also used for the SPA web application for all the CRUD operations (Read\/Update data related to the main entities like Customers, Drivers, Vehicles, etc.), but those services and how to deploy to Azure was described in <a href=\"http:\/\/blogs.msdn.com\/b\/cesardelatorre\/archive\/2014\/11\/21\/myshuttle-biz-asp-net-5-demos.aspx\">my post that focuses on ASP.NET 5<\/a>.<\/p>\n<p>In this current blog post the focus is on the Azure Mobile Service, Azure Push notifications configuration in Azure Notifications Hub and also as probably the most important topic here, the WebJob and the integration with external LOB services and API like )365 API and Salesforce REST API. You can see these topics highlighted in yellow (tagged with the number 2) in the image below.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/8787.image_493B9F8F.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/3581.image_thumb_44C51EC8.png\" alt=\"image\" width=\"850\" height=\"480\" border=\"0\" \/><\/a><\/p>\n<p>In this second sub-scenario is where you can understand the process that is being triggered from the driver&rsquo;s app (Cordova app) when submitting the invoice data into the Azure Mobile Service which is then uploading data to Salesforce CRM and creating\/submitting a message into an Azure queue so the .PDF invoice is created and submitted to O365 in an asynchronous way.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/3173.image_55029467.png\" alt=\"\" width=\"802\" height=\"621\" \/><\/p>\n<p>But before getting into the detailes of the implementation and code, let&rsquo;s provide the details on how you can deploy these services into your own infrastructure in Azure.<\/p>\n<h2>Setting up the backend services in Microsoft Azure<\/h2>\n<p>The requirements in order to set these services in Azure are the following:<\/p>\n<p><strong>&#8211; 1.<\/strong> <strong>Visual Studio 2015 Preview<\/strong><\/p>\n<p><strong>&#8211; 2. An Azure subscription. <\/strong>Any Azure subscription, either a <a href=\"http:\/\/azure.microsoft.com\/en-us\/pricing\/free-trial\/\">trial Azure subscription<\/a> or an <a href=\"http:\/\/azure.microsoft.com\/en-us\/pricing\/member-offers\/msdn-benefits\/?WT.mc_id=MSDN_Subs_Portal1\">Azure subscription provided for free as a benefit from your MSDN subscription<\/a>, etc., would be good to go.<\/p>\n<p><strong>&#8211; 3. An Office 365 Account. <\/strong>See <a href=\"https:\/\/products.office.com\/en-us\/try\">Get Office 365 Trial<\/a><\/p>\n<p><strong>&#8211; 4. A Salesforce Account (OPTIONAL)<\/strong>. See <a href=\"https:\/\/www.salesforce.com\/form\/signup\/freetrial-sales.jsp\">Get Safesfoce trial<\/a><\/p>\n<p><strong>&#8211; 5. A Bing Maps token key. <\/strong><a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/ff428642.aspx\" target=\"_blank\">Getting a Bing Maps key<\/a><\/p>\n<h2>Creating the Azure Storage container<\/h2>\n<p>We&rsquo;re using an Azure Storage container where we&rsquo;re storing a .PDF that will be used as template or baseline for the invoices to be generated on the fly by the System, later on.<\/p>\n<p><strong>1. Create a new Azure Storage account for the MyShuttle&rsquo;s demos<\/strong><\/p>\n<p>You first need to have an Azure Storage account created to be used by MyShuttle. If you don&rsquo;t have it, let&rsquo;s create one, name it something related to MyShuttle and storage, like in the following step in the Azure portal, <a title=\"https:\/\/manage.windowsazure.com\/microsoft.onmicrosoft.com#Workspaces\/StorageExtension\/storage\" href=\"https:\/\/manage.windowsazure.com\/microsoft.onmicrosoft.com#Workspaces\/StorageExtension\/storage\">https:\/\/manage.windowsazure.com\/microsoft.onmicrosoft.com#Workspaces\/StorageExtension\/storage<\/a>:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/8640.image_1BD04392.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/2234.image_thumb_423226DD.png\" alt=\"image\" width=\"730\" height=\"473\" border=\"0\" \/><\/a><\/p>\n<p>Or you could also create it from the new Azure portal (codename &ldquo;Ibiza&rdquo;) at <a href=\"http:\/\/portal.azure.com\">http:\/\/portal.azure.com<\/a><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/8816.image_6C374667.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/5314.image_thumb_75930B9B.png\" alt=\"image\" width=\"729\" height=\"711\" border=\"0\" \/><\/a><\/p>\n<p>NOTE: Use different names than the ones shown here, as they are already in use.<\/p>\n<p><strong>2. Create a public container called &ldquo;myshuttleinvoice&rdquo; within the Azure Storage account<\/strong><\/p>\n<p>Now I create the container called &ldquo;myshuttleinvoice&rdquo; like in the following screenshot.<\/p>\n<p>Note that we need a public container rather than a private container.<\/p>\n<p>Using the current Azure portal:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/5126.image_37997ADD.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/0820.image_thumb_3E4C8460.png\" alt=\"image\" width=\"568\" height=\"408\" border=\"0\" \/><\/a><\/p>\n<p>Or using the new Azure portal (&ldquo;Ibiza&rdquo;):<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/5228.image_7E166AE5.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/1031.image_thumb_0BE8B0E1.png\" alt=\"image\" width=\"453\" height=\"714\" border=\"0\" \/><\/a><\/p>\n<p><strong>3. Copy our invoiceform.pdf template to the container<\/strong><\/p>\n<p>Copy our <a href=\"http:\/\/1drv.ms\/1KHCzD2\" target=\"_blank\"><strong>invoiceform.pdf template<\/strong><\/a> that you can download from <a href=\"http:\/\/1drv.ms\/1KHCzD2\" target=\"_blank\">here<\/a>. You can upload files to a container by using a tool like the following:<\/p>\n<p>&#8211; <a href=\"http:\/\/www.cerebrata.com\/products\/azure-explorer\/introduction\">Azure Explorer<\/a> (from Cerebrata &#8211; )<\/p>\n<p>&#8211; <a href=\"http:\/\/www.cerebrata.com\/products\/azure-management-studio\/introduction\">Azure Management Studio<\/a> (from Cerebrata &ndash; Licensed and trial)<\/p>\n<p>&#8211; <a href=\"https:\/\/azurestorageexplorer.codeplex.com\/\">Azure Storage Explorer<\/a> (Free and Open Source at CODEPLEX)<\/p>\n<p>In this case I used &ldquo;Azure Storage Explorer&rdquo; which is Open Source, but the Cerebrata tools are very powerful and cover many features, especially Azure Management Studio.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/1563.image_49BAC830.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/7752.image_thumb_6C125DA9.png\" alt=\"image\" width=\"806\" height=\"422\" border=\"0\" \/><\/a><\/p>\n<h2>Creating the Azure WebSite that will host the Azure WebJob<\/h2>\n<p>As shown in the architecture diagram up above, MyShuttle backend uses an <strong>Azure WebJob<\/strong> in order to read the Order info from an Azure Queue and then create an Order .PDF file on the fly and upload it to a SharePoint Library in O365. But, any Azure <strong>WebJob<\/strong> needs to be hosted and deployed thru an Azure <strong>WebSite<\/strong>. In this case, this WebSite won&rsquo;t have any logic, it is just a placeholder we need to deploy the WebJob. Sure, you could ask why we are not using the ASP.NET 5 WebSite. It is just because it is using a BETA version and regular WebJobs are still not supported in ASP.NET WebSites.<\/p>\n<p><strong>1. Create the Azure WebSite in your Azure subscription<\/strong><\/p>\n<p>So, I create an empty Azure WebSite, in my case I called it &ldquo;MyShuttleJobHost&rdquo;. You could call it differently. Here&rsquo;s how I created it from the new Azure Portal (&ldquo;Ibiza&rdquo;).<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/7802.image_0710246F.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/8463.image_thumb_5FD5DB39.png\" alt=\"image\" width=\"407\" height=\"645\" border=\"0\" \/><\/a><\/p>\n<p><strong>2. Add a config key to the WebSite&rsquo;s App Settings in the Azure portal.<\/strong><\/p>\n<p>That key will be used by our logic:<\/p>\n<p>Key name &ndash;&gt; pdf::invoiceform<\/p>\n<p>Key value &ndash;&gt; <a href=\"http:\/\/YOUR_STORAGE.blob.core.windows.net\/myshuttleinvoice\/invoiceform.pdf\">http:\/\/YOUR_STORAGE.blob.core.windows.net\/myshuttleinvoice\/invoiceform.pdf<\/a><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/6320.image_3FBACE7C.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/3276.image_thumb_34914432.png\" alt=\"image\" width=\"639\" height=\"615\" border=\"0\" \/><\/a>&nbsp;<\/p>\n<p>If you are not familiar with Azure WebSites, check this out: <a title=\"http:\/\/azure.microsoft.com\/en-us\/documentation\/articles\/web-sites-dotnet-get-started\/\" href=\"http:\/\/azure.microsoft.com\/en-us\/documentation\/articles\/web-sites-dotnet-get-started\/\">http:\/\/azure.microsoft.com\/en-us\/documentation\/articles\/web-sites-dotnet-get-started\/<\/a><\/p>\n<p><strong>3. Add two custom Connection Strings.<\/strong><\/p>\n<p>Two custom conn strings with the same value both:<\/p>\n<p>ConnString1 name &ndash;&gt; AzureWebJobsDashboard<\/p>\n<p>ConnString2 name &ndash;&gt; AzureWebJobsStorage<\/p>\n<p>Key value for both conn strings &ndash;&gt; DefaultEndpointsProtocol=https;AccountName=YOUR_STORAGE;AccountKey=ACCOUNT_KEY<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/4456.image_6E359AE7.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/0830.image_thumb_4284D0EB.png\" alt=\"image\" width=\"687\" height=\"755\" border=\"0\" \/><\/a><\/p>\n<h2>Creating the Azure Mobile Service that receives requests from the Cordova app in mobile devices<\/h2>\n<p>As shown in the architecture diagram up above, MyShuttle backend uses an <strong>Azure Mobile Service <\/strong>which is in charge of receiving the requests from the Cordova app (either running on Android, iOS or Windows Phone). This Azure Mobile Service receives the Order data thru HTTP, then it submits the customer&rsquo;s data into a Salesforce CRM and finally it creates an Azure message and puts that message in the Azure queue so the WebJob will pick it up later.<\/p>\n<p>If you are not familiar with Azure Mobile Services, check this info out: <a title=\"http:\/\/azure.microsoft.com\/en-us\/documentation\/articles\/mobile-services-dotnet-backend-windows-store-dotnet-get-started\/\" href=\"http:\/\/azure.microsoft.com\/en-us\/documentation\/articles\/mobile-services-dotnet-backend-windows-store-dotnet-get-started\/\">http:\/\/azure.microsoft.com\/en-us\/documentation\/articles\/mobile-services-dotnet-backend-windows-store-dotnet-get-started\/<\/a><\/p>\n<p><strong>1. Create the Azure Mobile Service in your Azure subscription<\/strong><\/p>\n<p>For now, we just need to create the Mobile Service in the subscription as a place holder. We will publish the ASP.NET code into Azure later on. Right now you just need to create the Mobile Service in Azure as shown in the screenshot. You can name it the way you&rsquo;d like, although you&rsquo;ll need to remember that name and URL when configuring the mobile apps&rsquo; URLs that they consume.<\/p>\n<p>In this case, Mobile Services is still not available in the new Azure Portal (&ldquo;Ibiza&rdquo;), so I&rsquo;m using the traditional Azure portal.<\/p>\n<p>Select the Azure region related to your geography, backend as .NET and leave blank the &ldquo;CONFIGURE ADVANCED PUSH SETTINGS&rdquo; since we&rsquo;ll configure the push notification and Push Notification Hub later on.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/5050.image_7C41B885.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/3806.image_thumb_30E214C1.png\" alt=\"image\" width=\"845\" height=\"653\" border=\"0\" \/><\/a><\/p>\n<p>When advancing to the next step in the wizard, <strong>select your already existing SQL DB that was created for the ASP.NET 5 MyShuttle Web Site<\/strong> (Check my blog post about ASP.NET 5 and MyShuttle, as you need to have those services running as the firt step). Also, you need to specify the user that you are using for that database which is specified in the ASP.NET 5 Web Site connection string that you are using. Check the key EntityFramework:MyShuttleContext:ConnectionStringKey that you should have in your ASP.NET 5 Azure WebSite for that.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/5367.image_587CA65B.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/3223.image_thumb_2D380F54.png\" alt=\"image\" width=\"831\" height=\"628\" border=\"0\" \/><\/a><\/p>\n<p>Wait a few minutes until the Azuer Mobile Service is created.. Then, if you go to the Mobile Service properties you&rsquo;d be able to check the &ldquo;by default&rdquo; conn strings based on the data you provided (SQL DB most of all).<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/7080.image_2E5971D9.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/3288.image_thumb_1C10AB17.png\" alt=\"image\" width=\"830\" height=\"248\" border=\"0\" \/><\/a><\/p>\n<p>But you also need to add 2 new <strong>app settings<\/strong> in the mobile service config. Right over the conn-string section is where you&rsquo;ll find the app settings section:<\/p>\n<p>Key 1 name &ndash;&gt; <strong>MS_TableConnectionString<\/strong><\/p>\n<p>Key 1 value &ndash;&gt;Data Source=<strong>YOUR_SQL_DB_SERVER<\/strong>.database.windows.net;Initial Catalog=<strong>myshuttlebiz_db<\/strong>;User ID=<strong>MyShuttleUser<\/strong>;Password=<strong>YOUR_PASSWORD<\/strong>;Asynchronous Processing=True;TrustServerCertificate=False;<\/p>\n<p>Key 2 name &ndash;&gt; <strong>AzureWebJobsStorage<\/strong><\/p>\n<p>Key 2 value &ndash;&gt; DefaultEndpointsProtocol=http;AccountName=<strong>YOUR_STORAGE_NAME<\/strong>;AccountKey=<strong>YOUR_KEY<\/strong><\/p>\n<p>The key 2 (value for <strong>AzureWebJobsStorage<\/strong>) should be consistent with the storage account and key that you created at the beginning of this blog post.<\/p>\n<p>So this is how I have my app settings in my Azure Mobile Service.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/7418.image_0D1D0297.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/5355.image_thumb_1AEF4892.png\" alt=\"image\" width=\"863\" height=\"412\" border=\"0\" \/><\/a><\/p>\n<p>These conn-strings (MS_TableConnectionString) will be unified in our next version targeting VS 2015 CTP5 and VS 2015 RC, by the way.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<h2>Publishing the Azure Mobile Service .NET assemblies from Visual Studio into the Azure Mobile Service&ldquo;place-holder&rdquo;<\/h2>\n<p>Until now we just have created the &ldquo;place-holders&rdquo; in Azure, but we actually need to publish our assemblies, the actual bits generated by our code in Visual Studio.<\/p>\n<h3>Deploying and Debugging the MyShuttle Azure Mobile Services project<\/h3>\n<p>1. Open the solution named <strong>05_Demos_Azure_ConnServices.sln<\/strong><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/2746.image_78F2A2A0.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/3326.image_thumb_38BC8926.png\" alt=\"image\" width=\"464\" height=\"272\" border=\"0\" \/><\/a><\/p>\n<p>2. For the <strong>Salesforce integration<\/strong> and once you have a valid SalesForce account (could be a trial), set the following key\/value pairs in the Web.config file of the MyShuttle.MobileServices project.<\/p>\n<p>&#8211; Salesforce:ConsumerKey<\/p>\n<p>&#8211; Salesforce:Username<\/p>\n<p>&#8211; Salesforce:Password<\/p>\n<p>&#8211; Salesforce:ConsumerSecret<\/p>\n<p>&#8211; Salesforce:AccountId<\/p>\n<p>Like in the following Web.config.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/1263.image_319D4CAE.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/7120.image_thumb_11823FF1.png\" alt=\"image\" width=\"844\" height=\"140\" border=\"0\" \/><\/a><\/p>\n<p>If you don&rsquo;t want to have the Salesforce integration, you could comment the following code in the <strong>PostRide()<\/strong> method at the <strong>RideController.cs<\/strong> class.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/7142.image_3446085F.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/5008.image_thumb_7F39792E.png\" alt=\"image\" width=\"297\" height=\"463\" border=\"0\" \/><\/a><\/p>\n<p>Here&rsquo;s the code you can comment if you don&rsquo;t want the Salesforce integration.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/1307.image_0D0BBF2A.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/5582.image_thumb_1ADE0525.png\" alt=\"image\" width=\"732\" height=\"210\" border=\"0\" \/><\/a><\/p>\n<p>3. <strong>When using VS 2015 Preview (Nov.2014)<\/strong> (this is just to fix a bug in the VS 2015 Preview that loses the reference to the nugget source) you might need to <strong>re-add the nugget.org package source<\/strong> so you can get all the nugget package references, download the missing references and compile the project properly:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/3348.image_3918D677.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/7462.image_thumb_148748F3.png\" alt=\"image\" width=\"785\" height=\"528\" border=\"0\" \/><\/a><\/p>\n<p>4. Compile the <strong>MyShuttle.MobileServices<\/strong> Azure Mobile Services project.<\/p>\n<p>5. Deploy the <strong>MyShuttle.MobileServices<\/strong> project to Azure into the Azure Mobile Service &ldquo;place holder&rdquo; that you created previously: <a title=\"http:\/\/YOUR_SITE.azure-mobile.net\/\" href=\"http:\/\/YOUR_MOBILE_SERVICE_NAME.azure-mobile.net\/\">http:\/\/YOUR_MOBILE_SERVICE_NAME.azure-mobile.net\/<\/a><\/p>\n<p>Right click on the Mobile Service project and hit on the &ldquo;Publish&rdquo; menu option.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/2364.image_63C0048A.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/7167.image_thumb_6A730E0D.png\" alt=\"image\" width=\"614\" height=\"670\" border=\"0\" \/><\/a><\/p>\n<p>In the wizard, let&rsquo;s create a new profile by connecting and downloading that info directly from our Azure subscription, so that you&rsquo;ll use it in the future when publishing the Mobile Service.<\/p>\n<p>Select the &ldquo;Microsoft Azure Mobile Services&rdquo; option.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/6562.image_3F2E7706.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/4428.image_thumb_71261790.png\" alt=\"image\" width=\"496\" height=\"238\" border=\"0\" \/><\/a><\/p>\n<p>You might need to log in into Microsoft Azure with your Microsoft Account, then select the Azure Mobile Service that you created in the portal, so you have a similar screen to the following.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/1374.image_13E9DFFF.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/8231.image_thumb_45E18089.png\" alt=\"image\" width=\"593\" height=\"458\" border=\"0\" \/><\/a><\/p>\n<p>It will download the profile settings and you should get to the following screen with all the connection data downloaded from the Azure portal.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/6177.image_25C673CC.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/2476.image_thumb_3398B9C7.png\" alt=\"image\" width=\"743\" height=\"589\" border=\"0\" \/><\/a><\/p>\n<p>Press the &ldquo;Next&rdquo; button and select &ldquo;Debug &ndash; Any CPU&rdquo; as Configuration so you&rsquo;ll be able to remotely debug the Mobile Service in Azure&rsquo;s cloud.<\/p>\n<p>Leave the rest as it is.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/3056.image_137DAD0A.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/3060.image_thumb_0C5E7092.png\" alt=\"image\" width=\"803\" height=\"703\" border=\"0\" \/><\/a><\/p>\n<p>Press &ldquo;Next&rdquo; and &ldquo;Publish&rdquo;.<\/p>\n<p>You should see a &ldquo;Web Publish Activity&rdquo; in Visual Studio similar to the following.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/2474.image_481E0945.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/3377.image_thumb_2802FC88.png\" alt=\"image\" width=\"624\" height=\"342\" border=\"0\" \/><\/a><\/p>\n<p>And a browser open with the default Azure Mobile Service page.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/3301.image_07E7EFCB.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/4861.image_thumb_00C8B353.png\" alt=\"image\" width=\"683\" height=\"573\" border=\"0\" \/><\/a><\/p>\n<p>Now, in order to test the Mobile Service, we need to configure the client app so it points and consumes this specific Mobile Service.<\/p>\n<h3>Test the Mobile Service with a Web Service tool<\/h3>\n<p>Before trying with the client mobile apps, I can test my Azure Mobile Services with any HTTP tool. In my case, I like to use Google POSTMAN tool, since it is pretty simple.<\/p>\n<p>As you can see, we need to provide our Azure Mobile Service key (<strong>X-ZUMO-APPLICATION<\/strong>) that you can get from the Azure portal within your Azure Mobile Service &ldquo;MANAGE KEYS&rdquo; section, and of course, any REST service method\/action like a simple GET method as <a title=\"https:\/\/myshuttlebiz.azure-mobile.net\/Tables\/Employee\/ \" href=\"https:\/\/YOUR_MOBILE_SERVICE.azure-mobile.net\/Tables\/Employee\/\">https:\/\/YOUR_MOBILE_SERVICE.azure-mobile.net\/Tables\/Employee\/ <\/a><\/p>\n<p><strong>Testing my deployed Azure Mobile Services with POSTMAN<\/strong><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/6253.image_4F941735.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/5670.image_thumb_362C13FB.png\" alt=\"image\" width=\"878\" height=\"263\" border=\"0\" \/><\/a><\/p>\n<p>If you provided the right data and your service is working against the SQL DB, you should get info like I do in that screenshot.<\/p>\n<h3>Configure the Cordova client mobile app with the right Services&rsquo; URL to consume<\/h3>\n<p>This client apps is the Cordova client app (MyShuttle mobile app for drivers), in this case.<\/p>\n<p>1. Open the <strong>03_Demos_Cordova.sln solution<\/strong><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/8132.image_43FE59F6.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/4431.image_thumb_75F5FA80.png\" alt=\"image\" width=\"456\" height=\"418\" border=\"0\" \/><\/a><\/p>\n<p>2. Open the app&mdash;&gt;modules&mdash;&gt;core&mdash;&gt;services&#8211;&gt;<strong>settingsService.ts<\/strong> TypeScript file in order to provide the Mobile Service URL and security settings.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/5001.image_1CC410C1.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/7673.image_thumb_7CA90403.png\" alt=\"image\" width=\"440\" height=\"612\" border=\"0\" \/><\/a><\/p>\n<p>3. Within the <strong>settingsService.ts<\/strong> file, update the following config with your own data:<\/p>\n<p>this.bingMapsKey = &#8216;<strong>YOUR_BING_MAPS_TOKEN_KEY<\/strong>&#8216;; <br \/>this.mobileServiceKey = &#8216;<strong>YOUR_MOBILE_SERVICE_KEY<\/strong>&#8216;; <br \/>this.realTimeNotificationsServerUrl = &#8216;<a href=\"http:\/\/YOUR_ASPNET5_SITE.azurewebsites.net\/';\">http:\/\/<strong>YOUR_ASPNET5_SITE<\/strong>.azurewebsites.net\/&#8217;;<\/a><\/p>\n<p>this.storageService.getValue(&#8216;serviceUrl&#8217;, &#8216;https:\/\/<strong>YOUR_MOBILE_SERVICE<\/strong>.azure-mobile.net\/&#8217;);<\/p>\n<p>4. Save the <strong>settingsService.ts<\/strong> file<\/p>\n<p>5. Select the Microsoft VS Emulator Android Phone<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/0602.image_64A6E066.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/docs.microsoft.com\/en-us\/archive\/blogs\/\" alt=\"image\" width=\"778\" height=\"104\" border=\"0\" \/><\/a><\/p>\n<p>6. Hit F5, and you should get the Cordova app running in the Microsoft Android Emulator.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/2500.image_36DF8297.png\"><img decoding=\"async\" style=\"float: none;padding-top: 0px;padding-left: 0px;margin-left: auto;padding-right: 0px;margin-right: auto;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/5430.image_thumb_7619224A.png\" alt=\"image\" width=\"361\" height=\"608\" border=\"0\" \/><\/a><\/p>\n<p>7. You can stop de debugger, but keep the emulator open, as we&rsquo;ll use the Cordova app again in order to invoke our mobile service<\/p>\n<h3><strong>DEBUGGING the AZURE MOBILE SERVICE<\/strong><\/h3>\n<p><strong>Let&rsquo;s debug the AZURE MOBILE SERVICE<\/strong> before moving to a different part of the architecture, so we make sure that our Cordova client app is really consuming our Azure Mobile Service deployed in Azure&rsquo;s cloud!.<\/p>\n<p>1. Go back again to VS and the solution <strong>05_Demos_Azure_ConnServices.sln.<\/strong><\/p>\n<p>2. Put a breakpoint in the <strong>RideController.cs<\/strong>, method <strong>PostRide(Ride item)<\/strong>.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/4375.image_6520448E.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/8424.image_thumb_6603FA9F.png\" alt=\"image\" width=\"851\" height=\"360\" border=\"0\" \/><\/a><\/p>\n<p>3. Open the Server Explorer window within Visual Studio and search for the MOBILE SERVICE within your Azure account.<\/p>\n<p>Right click on your Azure Mobile Service and select &ldquo;Attach Debugger&rdquo;. Wait a few seconds until it is ready and attached to the remote process in the Azure cloud!<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/5241.image_42C25621.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/1057.image_thumb_4AC548AA.png\" alt=\"image\" width=\"694\" height=\"590\" border=\"0\" \/><\/a><\/p>\n<p>4. Go to Android emulator and execute the Cordova app and advance in the app until you can sign.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/5140.image_00426A8B.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/4382.image_thumb_271080CB.png\" alt=\"image\" width=\"249\" height=\"415\" border=\"0\" \/><\/a>&nbsp;&nbsp;&nbsp;&nbsp; <a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/6471.image_4DDE970B.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/7041.image_thumb_5FBB2AD8.png\" alt=\"image\" width=\"254\" height=\"415\" border=\"0\" \/><\/a><\/p>\n<p>5. and the hit the &ldquo;Accept&rdquo; button which is invoking the Mobile Service in Azure.<\/p>\n<p>You should see the debugger stopping on the specified line in your Mobile Service!<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/8130.image_3FA01E1B.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/2766.image_thumb_4248D9CC.png\" alt=\"image\" width=\"863\" height=\"516\" border=\"0\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<h3>Checking the messages being created and published in the Azure queues<\/h3>\n<p>Before working with the WebJob to be deployed, you can check how the Azure queue messages are being stored in the queue.<\/p>\n<p>Exploring the <strong>MyShuttle invoice<\/strong> messages in Azure queues with the <strong>Cerebrata Azure Management Studio<\/strong> tool.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/5432.image_572AAFE7.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/5047.image_thumb_5DDDB96A.png\" alt=\"image\" width=\"619\" height=\"455\" border=\"0\" \/><\/a><\/p>\n<p>Exploring the <strong>MyShuttle invoice<\/strong> messages in Azure queues with the <strong>Azure Storage Explorer<\/strong> tool.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/2804.image_726308E8.png\"><img decoding=\"async\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/32\/2019\/03\/2816.image_thumb_6B43CC70.png\" alt=\"image\" width=\"617\" height=\"362\" border=\"0\" \/><\/a><\/p>\n<h2>Deploying and Debugging the MyShuttle Azure WebJob project<\/h2>\n<p>I&rsquo;ll continue when I have the time&hellip; Sorry folks, but I thought it would be good if I publish the Mobile Services section as it is right now even when I didn&rsquo;t have the time to finish this post.. I need to write the procedure in order to work with the Azure Web Job, etc.<\/p>\n<p>TO BE CONTINUED&hellip; \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>[**NEW!! &#8211; Updated on March 2015 &#8211; Compatible with VS 2015 CTP 6 **] This blog post (focusing on the Azure backend services for MyShuttle.biz mobile apps) is the fifth post of a blog posts series covering the different scenarios implemented by the MyShuttle.biz apps. 1. Blog Post: Global Intro of the MyShuttle.biz demo apps [&hellip;]<\/p>\n","protected":false},"author":362,"featured_media":12806,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-2011","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cesardelatorre"],"acf":[],"blog_post_summary":"<p>[**NEW!! &#8211; Updated on March 2015 &#8211; Compatible with VS 2015 CTP 6 **] This blog post (focusing on the Azure backend services for MyShuttle.biz mobile apps) is the fifth post of a blog posts series covering the different scenarios implemented by the MyShuttle.biz apps. 1. Blog Post: Global Intro of the MyShuttle.biz demo apps [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/cesardelatorre\/wp-json\/wp\/v2\/posts\/2011","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/cesardelatorre\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/cesardelatorre\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cesardelatorre\/wp-json\/wp\/v2\/users\/362"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cesardelatorre\/wp-json\/wp\/v2\/comments?post=2011"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/cesardelatorre\/wp-json\/wp\/v2\/posts\/2011\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cesardelatorre\/wp-json\/wp\/v2\/media\/12806"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/cesardelatorre\/wp-json\/wp\/v2\/media?parent=2011"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cesardelatorre\/wp-json\/wp\/v2\/categories?post=2011"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cesardelatorre\/wp-json\/wp\/v2\/tags?post=2011"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}