{"id":2427,"date":"2019-05-08T13:09:18","date_gmt":"2019-05-08T05:09:18","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/iotdev\/?p=2427"},"modified":"2019-05-21T17:34:47","modified_gmt":"2019-05-21T09:34:47","slug":"debug-iot-edge-c-or-csharp-linux-module-container-with-visual-studio-azure-iot-edge-tools","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/iotdev\/debug-iot-edge-c-or-csharp-linux-module-container-with-visual-studio-azure-iot-edge-tools\/","title":{"rendered":"Debug IoT Edge C \/ C# Linux Module Container with Visual Studio Azure IoT Edge Tools"},"content":{"rendered":"<p><a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=vsc-iot.vsiotedgetools\">Azure IoT Edge Tools (Preview) for Visual Studio 2017<\/a> allows you to easily develop and debug Azure IoT Edge modules locally. To learn how to use this extension to develop and debug Edge modules locally, you can refer these documents:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/iotdev\/easily-develop-and-debug-azure-iot-edge-c-modules-with-azure-iot-edge-tools-preview-0-3-1\/\">Easily Develop and Debug Azure IoT Edge C Modules with Azure IoT Edge Tools<\/a><\/p>\n<p><a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/iot-edge\/how-to-visual-studio-develop-module\">Use Visual Studio 2017 to develop and debug modules for Azure IoT Edge (Preview)<\/a><\/p>\n<p>However, remote debugging module container running in Edge device is not straightforward. This\u00a0tutorial\u00a0will use Raspberry Pi to\u00a0demonstrate\u00a0how\u00a0to\u00a0remotely debug\u00a0C\/C#\u00a0Linux module container\u00a0from dev machine.<\/p>\n<p>For Windows platform, you can refer this blog:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/iotdev\/debug-iot-edge-c-or-csharp-windows-module-container-with-visual-studio-azure-iot-edge-tools\/\">Debug IoT Edge C \/ C# Windows Module Container with Visual Studio Azure IoT Edge Tools<\/a><\/p>\n<p>Let\u2019s see how it works.<\/p>\n<h3><strong>Prerequisites<\/strong><\/h3>\n<h4>Setup Your Raspberry Pi<\/h4>\n<ul>\n<li>Install\u00a0<a href=\"https:\/\/www.raspberrypi.org\/downloads\/raspbian\/\">Raspbian<\/a>\u00a0on your Raspberry Pi by following this\u00a0<a href=\"https:\/\/www.raspberrypi.org\/documentation\/installation\/installing-images\/\">tutorial<\/a>.<\/li>\n<li>Setup your Raspberry Pi as an IoT Edge device \u2013 Follow the instructions to install\u00a0<a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/iot-edge\/how-to-install-iot-edge-linux-arm\">Azure IoT Edge runtime on Linux(arm32v7\/armhf)<\/a>.<\/li>\n<li>Enable remote API for\u00a0dockerd\u00a0on Raspberry Pi:\n<pre class=\"lang:default decode:true\">sudo nano \/lib\/systemd\/system\/docker.service to append -H tcp:\/\/0.0.0.0:2375 at the line starting with \u201cExecStart\u201d:   \r\nExecStart=\/usr\/bin\/dockerd -H fd:\/\/ -H tcp:\/\/0.0.0.0:2375 \r\nsudo systemctl daemon-reload \r\nsudo systemctl restart docker\r\n<\/pre>\n<\/li>\n<li><a href=\"https:\/\/docs.docker.com\/install\/linux\/linux-postinstall\/#manage-docker-as-a-non-root-user\">Manage Docker as a non-root user<\/a>\u00a0on your Raspberry Pi, so that you don\u2019t need to preface the docker command with sudo.<\/li>\n<\/ul>\n<h4>Setup Your Development Machine<\/h4>\n<ul>\n<li>OS: Windows 10<\/li>\n<li>Visual Studio 2017 with update 7 or later, including workloads \u201c.NET desktop development\u201d, \u201cWindows desktop development with C++\u201d and \u201cAzure development workload\u201d<\/li>\n<li>Download and install\u202f<a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=vsc-iot.vsiotedgetools\" target=\"_blank\" rel=\"noopener\">Azure IoT Edge extension (Preview) for Visual Studio<\/a><\/li>\n<li>Download and install <a href=\"https:\/\/hub.docker.com\/editions\/community\/docker-ce-desktop-windows\" target=\"_blank\" rel=\"noopener\">Docker Desktop for Windows<\/a><\/li>\n<li>Set up your local development environment to debug, run, and test your IoT Edge solution by installing the\u202f<a href=\"https:\/\/pypi.org\/project\/iotedgehubdev\/\" target=\"_blank\" rel=\"noopener\">Azure IoT\u00a0EdgeHub\u00a0Dev Tool<\/a>. Install\u202f<a href=\"https:\/\/www.python.org\/\" target=\"_blank\" rel=\"noopener\">Python (2.7\/3.6) and Pip<\/a>\u202fand then install the\u202f<strong>iotedgehubdev<\/strong>\u202fpackage by running the following command in your terminal. Make sure your Azure IoT\u00a0EdgeHub\u00a0Dev Tool version is\u00a0equal\u00a0or\u00a0greater than 0.8.0.\n<pre class=\"lang:default decode:true\">pip install --upgrade iotedgehubdev<\/pre>\n<\/li>\n<li><a href=\"https:\/\/www.puttygen.com\/download-putty\" target=\"_blank\" rel=\"noopener\">Install the PuTTY<\/a>\u00a0on your machine, which is used\u00a0to generate SSH keys.<\/li>\n<li>[Optional] Install azure-iot-sdk-c for windows-x64 through\u00a0vcpkg\n<pre class=\"lang:default decode:true \">git clone https:\/\/github.com\/Microsoft\/vcpkg\u00a0\r\n\r\ncd\u00a0vcpkg\u00a0\r\n\r\n.\\bootstrap-vcpkg.bat\u00a0\r\n\r\n.\\vcpkg\u00a0install azure-iot-sdk-c:x64-windows\u00a0\r\n\r\n.\\vcpkg\u00a0--triplet x64-windows integrate install<\/pre>\n<\/li>\n<\/ul>\n<h4>Configure DOCKER_HOST in Extension Settings<\/h4>\n<ul>\n<li>Open Visual Studio 2017, click menu<strong>\u00a0Tools-&gt;Azure IoT Edge Tools -&gt; IoT Edge Tools Settings<\/strong>, set DOCKER_HOST as\u00a0IP\u00a0and\u00a0port\u00a0of\u00a0your Raspberry Pi as below, for example it is tcp:\/\/10.172.14.127:2375\u00a0for my Raspberry Pi:\n<img decoding=\"async\" width=\"1024\" height=\"717\" class=\"wp-image-2428\" style=\"font-size: 1rem;\" src=\"https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/c-users-eriwan-fareast-appdata-local-packages-mic.png\" alt=\"C:\\Users\\eriwan.FAREAST\\AppData\\Local\\Packages\\Microsoft.Office.Desktop_8wekyb3d8bbwe\\AC\\INetCache\\Content.MSO\\15C6ED28.tmp\" srcset=\"https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/c-users-eriwan-fareast-appdata-local-packages-mic.png 1024w, https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/c-users-eriwan-fareast-appdata-local-packages-mic-300x210.png 300w, https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/c-users-eriwan-fareast-appdata-local-packages-mic-768x538.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h3><strong>Debug C \/ C# Module Container Running in Remote Edge Device<\/strong><\/h3>\n<ol>\n<li>Open Visual Studio 2017 and click menu <strong>File -&gt; New -&gt;Project. <\/strong>In the\u202f<strong>New Project<\/strong>\u202fdialog, select\u202f<strong>Installed -&gt; Azure IoT<\/strong>, select\u202f<strong>Azure IoT Edge (Linux arm32v7)<\/strong>, enter a name for your project and specify the location, and then select\u202f<strong>OK<\/strong>.\n<img decoding=\"async\" class=\"wp-image-2429\" src=\"https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/word-image.png\" width=\"1139\" height=\"702\" \/><\/li>\n<li>In the project wizard, select <strong>C or C# Module<\/strong>, and replace\u202f<strong>localhost:5000<\/strong>\u202fwith your own registry info, then click\u202f<strong>Yes<\/strong>:\n<img decoding=\"async\" width=\"873\" height=\"607\" class=\"wp-image-2430\" style=\"font-size: 1rem;\" src=\"https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/word-image-1.png\" srcset=\"https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/word-image-1.png 873w, https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/word-image-1-300x209.png 300w, https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/word-image-1-768x534.png 768w\" sizes=\"(max-width: 873px) 100vw, 873px\" \/><\/li>\n<li>Now there\u2019re two projects in the solution, one is Edge module project, which is just simple .Net Core or C project, the other one is called Edge project.<\/li>\n<li>To debug C \/ C# module in\u00a0Linux\u00a0container, we need\u00a0to update\u00a0Dockerfile.arm32v7.debug\u00a0to enable SSH service:For C module, update the Dockerfile.arm32v7.debug\u00a0file as below:\n<a href=\"https:\/\/github.com\/Azure-Samples\/azure-iot-edge-c-linux-arm-container-debug-sample\/blob\/master\/IotEdgeModule1\/Dockerfile.arm32v7.debug\">Dockerfile for Azure IoT Edge ARM32 C Module with Remote Debug Support<\/a>For C# module, update the Dockerfile.arm32v7.debug\u00a0file as below:\n<a href=\"https:\/\/github.com\/Azure-Samples\/azure-iot-edge-csharp-linux-arm-container-debug-sample\/blob\/master\/IotEdgeModule1\/Dockerfile.arm32v7.debug\">Dockerfile for Azure IoT Edge ARM32 C# Module with Remote Debug Support<\/a><\/li>\n<li>Open PuTTYgen.exe, select\u00a0RSA\u00a0and 2048 bits, click Generate and follow instructions to generate a key\n<img decoding=\"async\" width=\"638\" height=\"579\" class=\"wp-image-2431\" style=\"font-size: 1rem;\" src=\"https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/word-image-2.png\" srcset=\"https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/word-image-2.png 638w, https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/word-image-2-300x272.png 300w\" sizes=\"(max-width: 638px) 100vw, 638px\" \/><\/li>\n<li>Copy the public key (entire contents of the textarea) into\u00a0IotEdgeModule1\/authorized_keys, and export private key (Conversions -&gt; Export OpenSSH key -&gt; (no passphrase) -&gt; overwrite) to IotEdgeModule1\/openssh_privatekey.<\/li>\n<li>Edit <strong>deployment.template.json<\/strong> file in Azure IoT Edge project to expose 22 port which would be used by SSH service. Here we use 9022 as host port but you may specify a different port, which will be used as SSH port to connect into IotEdgeModule1 container.\n<pre class=\"lang:default decode:true\">\"IotEdgeModule1\":{  \r\n   \"version\":\"1.0.0\",\r\n   \"type\":\"docker\",\r\n   \"status\":\"running\",\r\n   \"restartPolicy\":\"always\",\r\n   \"settings\":{  \r\n      \"image\":\"${MODULES.IotEdgeModule1}\",\r\n      \"createOptions\":{  \r\n         \"HostConfig\":{  \r\n            \"Privileged\":true,\r\n            \"ExposedPorts\":{  \r\n               \"22\/tcp\":{  \r\n\r\n               }\r\n            },\r\n            \"PortBindings\":{  \r\n               \"22\/tcp\":[  \r\n                  {  \r\n                     \"HostPort\":\"9022\"\r\n                  }\r\n               ]\r\n            }\r\n         }\r\n      }\r\n   }\r\n}<\/pre>\n<\/li>\n<li>Right click on the Edge project to open context menu, then click <strong>Properties<\/strong>, select <strong>Configuration Properties <\/strong>in the left pane of pop-up window, make sure you select <strong>Debug<\/strong> for <strong>Target Configuration<\/strong>, click <strong>OK<\/strong> to close the window, then click \u201c<strong>File -&gt; Save All<\/strong>\u201d in the context menu to make sure the configuration change is written into project file.<img decoding=\"async\" width=\"1029\" height=\"702\" class=\"wp-image-2432\" style=\"font-size: 1rem;\" src=\"https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/word-image-3.png\" srcset=\"https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/word-image-3.png 1029w, https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/word-image-3-300x205.png 300w, https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/word-image-3-768x524.png 768w, https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/word-image-3-1024x699.png 1024w\" sizes=\"(max-width: 1029px) 100vw, 1029px\" \/><\/li>\n<li>If you\u2019re using private registry like Azure Container Registry, use the following Docker command to sign in.\n<pre class=\"lang:default decode:true\">docker login -u &lt;ACR username&gt; -p &lt;ACR password&gt; &lt;ACR login server&gt;<\/pre>\n<p>&nbsp;<\/li>\n<li>Click <strong>Show All Files<\/strong> icon as below, a <strong>.env <\/strong>file should be displayed under Edge project, open the .env file to input credential for your registry, this credential will be used by IoT Edge runtime to pull module images after deployment.\n<img decoding=\"async\" width=\"1245\" height=\"461\" class=\"wp-image-2433\" style=\"font-size: 1rem;\" src=\"https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/word-image-4.png\" srcset=\"https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/word-image-4.png 1245w, https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/word-image-4-300x111.png 300w, https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/word-image-4-768x284.png 768w, https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/word-image-4-1024x379.png 1024w\" sizes=\"(max-width: 1245px) 100vw, 1245px\" \/><\/li>\n<li>Right click on the Edge project and click <strong>Build and Push IoT Edge Modules<\/strong> to build, push the Docker image for the C or C# module. After push is done, open\u202f<strong>Cloud Explorer<\/strong>\u202fby clicking\u202f<strong>View<\/strong>\u202f-&gt;\u202f<strong>Cloud Explorer<\/strong>, expand your subscription and find the IoT Edge device corresponding to your Raspberry Pi device, right click on the IoT Edge device to create a deployment\u00a0for\u00a0it, you need to select the deployment manifest file under the path below:\n<pre class=\"lang:default decode:true\">$AzureIoTEdgeAppSolutionDir\\$AzureIotEdgeAppX\\config\\deployment.arm32v7.debug.json<\/pre>\n<p><img decoding=\"async\" width=\"436\" height=\"536\" class=\"wp-image-2434\" src=\"https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/word-image-5.png\" srcset=\"https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/word-image-5.png 436w, https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/word-image-5-244x300.png 244w\" sizes=\"(max-width: 436px) 100vw, 436px\" \/><\/li>\n<li>Run the following command to start ssh for module container in Raspberry Pi\n<pre class=\"lang:default decode:true \">docker exec -it -d [Your Edge Module Container ID] service ssh start<\/pre>\n<\/li>\n<li>After successfully starting SSH service, click <strong>Debug<\/strong> -&gt; <strong>Attach to Process<\/strong>, set Connection Type to <strong>SSH<\/strong> and Connection target to the IP address of your Raspberry Pi, it is 10.172.15.28 for my Raspberry Pi, and then type Enter. In the pop-up window, input the following configurations:\n<blockquote><p><em>\nHost name: <strong>10.172.15.28\n<\/strong>Port:\u00a0<strong>9022\n<\/strong>User name:\u00a0<strong>root\n<\/strong>Authentication type:\u00a0<strong>Private Key\n<\/strong>Pivate key file:\u00a0<strong>openssh_privatekey file path generated in step 7<\/strong><\/em><\/p>\n<p><img decoding=\"async\" width=\"560\" height=\"594\" class=\"wp-image-2435\" style=\"font-size: 1rem;\" src=\"https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/word-image-6.png\" srcset=\"https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/word-image-6.png 560w, https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/word-image-6-283x300.png 283w\" sizes=\"(max-width: 560px) 100vw, 560px\" \/><\/p><\/blockquote>\n<\/li>\n<li>After successfully connecting to the SSH, then you can choose the process and click Attach. For C module, you need to choose process <strong>main<\/strong> and \u201cAttach to\u201d to <strong>Native code<\/strong>. For C# module you need to choose process <strong>dotnet<\/strong> and \u201cAttach to\u201d to <strong><strong>Managed (CoreCLR).\n<\/strong><\/strong><img decoding=\"async\" width=\"915\" height=\"756\" class=\"wp-image-2436\" style=\"font-size: 1rem;\" src=\"https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/word-image-7.png\" srcset=\"https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/word-image-7.png 915w, https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/word-image-7-300x248.png 300w, https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/word-image-7-768x635.png 768w\" sizes=\"(max-width: 915px) 100vw, 915px\" \/><\/li>\n<li>Now you can set breakpoint and debug your C or C# module<img decoding=\"async\" width=\"1075\" height=\"702\" class=\"wp-image-2437\" style=\"font-size: 1rem;\" src=\"https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/word-image-8.png\" srcset=\"https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/word-image-8.png 1075w, https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/word-image-8-300x196.png 300w, https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/word-image-8-768x502.png 768w, https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/05\/word-image-8-1024x669.png 1024w\" sizes=\"(max-width: 1075px) 100vw, 1075px\" \/><\/li>\n<\/ol>\n<h3><strong>Samples Projects<\/strong><\/h3>\n<ul>\n<li>Azure IoT Edge C Linux ARM remote debug sample:\n<a style=\"background-color: #f7f7f9; font-size: 1rem;\" href=\"https:\/\/github.com\/Azure-Samples\/azure-iot-edge-csharp-linux-arm-container-debug-sample\">https:\/\/github.com\/Azure-Samples\/azure-iot-edge-csharp-linux-arm-container-debug-sample<\/a><\/li>\n<li>Azure IoT Edge C# Linux ARM remote debug sample:\n<a style=\"background-color: #f7f7f9; font-size: 1rem;\" href=\"https:\/\/github.com\/Azure-Samples\/azure-iot-edge-c-linux-arm-container-debug-sample\">https:\/\/github.com\/Azure-Samples\/azure-iot-edge-c-linux-arm-container-debug-sample<\/a><\/li>\n<\/ul>\n<p><iframe style=\"left: 121.6px; top: 9785.75px; z-index: 100001; display: none;\" class=\"ginger-extension-definitionpopup\" src=\"chrome-extension:\/\/kdfieneakcjfaiglcfcgkidlkmlijjnh\/content\/popups\/definitionPopup\/index.html?title=remote&amp;description=a%20device%20that%20can%20be%20used%20to%20control%20a%20machine%20or%20apparatus%20from%20a%20distance\"><\/iframe><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Azure IoT Edge Tools (Preview) for Visual Studio 2017 allows you to easily develop and debug Azure IoT Edge modules locally. To learn how to use this extension to develop and debug Edge modules locally, you can refer these documents: Easily Develop and Debug Azure IoT Edge C Modules with Azure IoT Edge Tools Use [&hellip;]<\/p>\n","protected":false},"author":1253,"featured_media":1836,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[288],"tags":[6,164,7,9,16,19,20,28,376,536,34],"class_list":["post-2427","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-azure-iot-edge-development","tag-azure-iot","tag-azure-iot-edge","tag-azure-iot-hub","tag-debug","tag-internet-of-things","tag-iot-development-tools","tag-iot-edge","tag-raspberry-pi","tag-visual-studio","tag-visual-studio-2017","tag-visual-studio-extensions"],"acf":[],"blog_post_summary":"<p>Azure IoT Edge Tools (Preview) for Visual Studio 2017 allows you to easily develop and debug Azure IoT Edge modules locally. To learn how to use this extension to develop and debug Edge modules locally, you can refer these documents: Easily Develop and Debug Azure IoT Edge C Modules with Azure IoT Edge Tools Use [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/iotdev\/wp-json\/wp\/v2\/posts\/2427","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/iotdev\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/iotdev\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/iotdev\/wp-json\/wp\/v2\/users\/1253"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/iotdev\/wp-json\/wp\/v2\/comments?post=2427"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/iotdev\/wp-json\/wp\/v2\/posts\/2427\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/iotdev\/wp-json\/wp\/v2\/media\/1836"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/iotdev\/wp-json\/wp\/v2\/media?parent=2427"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/iotdev\/wp-json\/wp\/v2\/categories?post=2427"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/iotdev\/wp-json\/wp\/v2\/tags?post=2427"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}