{"id":2443,"date":"2023-06-13T22:13:32","date_gmt":"2023-06-13T14:13:32","guid":{"rendered":"http:\/\/www.jhouseconsulting.com\/?p=2443"},"modified":"2023-07-01T17:30:31","modified_gmt":"2023-07-01T09:30:31","slug":"xdping-c-function","status":"publish","type":"post","link":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/2023\/06\/13\/xdping-c-function-2443","title":{"rendered":"XDPing C# Function"},"content":{"rendered":"<p>I wrote this C# (csharp) function back in 2020 when developing the <a href=\"https:\/\/www.jhouseconsulting.com\/2020\/08\/28\/citrix-self-service-session-reset-tool-2106\" target=\"_blank\">Self-Service Session Reset Tool<\/a>. I have since enhanced it for improved error checking and logging and am happy to share it here for anyone else who wants to leverage it. I released a <a href=\"https:\/\/www.jhouseconsulting.com\/2019\/05\/16\/xdping-powershell-function-1931\" target=\"_blank\">PowerShell version<\/a> back in 2019. I like to integrate these functions into the scripts and tools I create as part of the health checks I do. I believe that by checking that the Broker&#8217;s Registrar service&nbsp;is reachable, listening and processing requests on its configured port, we can only then assume it is in&nbsp;a healthy state.<!--more--><\/p>\n<p>The original code was taken from the&nbsp;VDAAssistant.Backend.dll library which is included with the Citrix Health Assistant Tool. Citrix don&#8217;t obfuscate these libraries, so it&#8217;s easy to use tools like JetBrains decompiler to take a look at how they wrote this. From there I reverse engineer the code to extract what I need and wrap it up into a function that will work for me.<\/p>\n<p>The original Citrix XDPing tool can be found <a href=\"https:\/\/support.citrix.com\/article\/CTX123278\" target=\"_blank\">here<\/a>.&nbsp;The <a href=\"https:\/\/support.citrix.com\/article\/CTX207624\" target=\"_blank\">Citrix Health Assistant<\/a> tool has since replaced XDPing.<\/p>\n<p>Here is the code. It&#8217;s also available as a full project from my <a href=\"https:\/\/github.com\/jeremyts\/XDPing\" target=\"_blank\">GitHub repository<\/a>.&nbsp;Total number of downloads to date: 11.<\/p>\n<pre class=\"brush: csharp; auto-links: false; title: ; toolbar: false; notranslate\" title=\"\">\r\nusing System;\r\nusing System.Text;\r\n\/\/ Required for sockets\r\nusing System.Net.Sockets;\r\n\r\nnamespace XDPing\r\n{\r\n    class Program\r\n    {\r\n        static int Main(string&#x5B;] args)\r\n        {\r\n            string deliverycontroller = string.Empty;\r\n            int port = 80;\r\n\r\n            for (int i = 0; i &lt; args.Length; i++)\r\n            {\r\n                var arg = args&#x5B;i].ToLower();\r\n                if (arg == &quot;-deliverycontroller&quot; || arg == &quot;--deliverycontroller&quot; || arg == &quot;\/deliverycontroller&quot;)\r\n                {\r\n                    if (args.Length &gt;= i + 2)\r\n                    {\r\n                        deliverycontroller = args&#x5B;i + 1];\r\n                    }\r\n                }\r\n\r\n                if (arg == &quot;-port&quot; || arg == &quot;--port&quot; || arg == &quot;\/port&quot;)\r\n                {\r\n                    if (args.Length &gt;= i + 2)\r\n                    {\r\n                        int.TryParse(args&#x5B;i + 1], out port);\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (string.IsNullOrEmpty(deliverycontroller))\r\n            {\r\n                Console.WriteLine(&quot;Valid command line arguments must be supplied:&quot;);\r\n                Console.WriteLine(&quot;-deliverycontroller, --deliverycontroller or \/deliverycontroller is a required flag. This must be followed by the name of a Delivery Controller or Cloud Connector.&quot;);\r\n                Console.WriteLine(&quot;-port, --port or \/port is an optional flag. It will default to 80 if not supplied. This is the port the Broker's Registrar service listens on.&quot;);\r\n                return -1;\r\n            }\r\n\r\n            XDPing(deliverycontroller, port);\r\n\r\n            return 0;\r\n        }\r\n\r\n        \/\/\/ &lt;summary&gt;\r\n        \/\/\/ Performs an XDPing to make sure the Delivery Controller or Cloud Connector is in a healthy state.\r\n        \/\/\/ It test whether the Broker service is reachable, listening and processing requests on its configured port.\r\n        \/\/\/ We do this by issuing a blank HTTP POST requests to the Broker's Registrar service.\r\n        \/\/\/ Including &quot;Expect: 100-continue&quot; in the body will ensure we receive a respose of &quot;HTTP\/1.1 100 Continue&quot;,\r\n        \/\/\/ which is what we use to verify that it's in a healthy state.\r\n        \/\/\/ &lt;\/summary&gt;\r\n        \/\/\/ &lt;param name=&quot;deliverycontroller&quot;&gt;&lt;\/param&gt;\r\n        \/\/\/ &lt;param name=&quot;port&quot;&gt;&lt;\/param&gt;\r\n        \/\/\/ &lt;returns&gt;&lt;\/returns&gt;\r\n        static private bool XDPing(string deliverycontroller, int port)\r\n        {\r\n            \/\/ This code has essentially been taken from the Citrix Health Assistant Tool and improved for reliability and troubleshooting purposes.\r\n            \/\/ I was able to reverse engineer the process by decompiling the VDAAssistant.Backend.dll, which is a component of the Citrix Health\r\n            \/\/ Assistant Tool.\r\n            string service = &quot;http:\/\/&quot; + deliverycontroller + &quot;:&quot; + port +&quot;\/Citrix\/CdsController\/IRegistrar&quot;;\r\n            string s = string.Format(&quot;POST {0} HTTP\/1.1\\r\\nContent-Type: application\/soap+xml; charset=utf-8\\r\\nHost: {1}:{2}\\r\\nContent-Length: 1\\r\\nExpect: 100-continue\\r\\nConnection: Close\\r\\n\\r\\n&quot;, (object)service, (object)deliverycontroller, (object)port);\r\n            StringBuilder stringBuilder = new StringBuilder();\r\n            stringBuilder.AppendLine(&quot;Attempting an XDPing against &quot; + deliverycontroller + &quot; on TCP port number &quot; + port.ToString());\r\n            bool listening = false;\r\n            try\r\n            {\r\n                Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);\r\n                try\r\n                {\r\n                    socket.Connect(deliverycontroller, port);\r\n                    if (socket.Connected)\r\n                    {\r\n                        stringBuilder.AppendLine(&quot;- Socket connected&quot;);\r\n                        byte&#x5B;] bytes = Encoding.ASCII.GetBytes(s);\r\n                        \/\/ Send the string as bytes.\r\n                        socket.Send(bytes, bytes.Length, SocketFlags.None);\r\n                        stringBuilder.AppendLine(&quot;- Sent the data&quot;);\r\n                        byte&#x5B;] numArray = new byte&#x5B;21];\r\n                        socket.ReceiveTimeout = 5000;\r\n                        socket.Receive(numArray);\r\n                        stringBuilder.AppendLine(&quot;- Received the following 21 byte array: &quot; + BitConverter.ToString(numArray));\r\n                        \/\/ ASCII conversion - string from bytes\r\n                        string strASCII = Encoding.ASCII.GetString(numArray, 0, numArray.Length);\r\n                        \/\/ UTF conversion - String from bytes  \r\n                        string strUTF8 = Encoding.UTF8.GetString(numArray, 0, numArray.Length);\r\n                        stringBuilder.AppendLine(&quot;- Converting the byte array to an ASCII string we get the output between the quotes: \\&quot;&quot; + strASCII + &quot;\\&quot;&quot;);\r\n                        stringBuilder.AppendLine(&quot;- Converting the byte array to a UTF8 string we get the output between the quotes: \\&quot;&quot; + strUTF8 + &quot;\\&quot;&quot;);\r\n                        \/\/ Send an additional single byte of 32 (space) as 1 byte with no flags.\r\n                        socket.Send(new byte&#x5B;1] { (byte)32 }, 1, SocketFlags.None);\r\n                        stringBuilder.AppendLine(&quot;- Sending the following string as a byte to close the connection: \\&quot;&quot; + BitConverter.ToString(new byte&#x5B;1] { 32 }) + &quot;\\&quot;&quot;);\r\n                        if (strASCII.Trim().IndexOf(&quot;HTTP\/1.1 100 Continue&quot;, StringComparison.CurrentCultureIgnoreCase) == 0)\r\n                        {\r\n                            listening = true;\r\n                            stringBuilder.AppendLine(&quot;- The service is listening and healthy&quot;);\r\n                        }\r\n                        else\r\n                        {\r\n                            stringBuilder.AppendLine(&quot;- The service is not listening&quot;);\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        stringBuilder.AppendLine(&quot;- Socket failed to connect&quot;);\r\n                    }\r\n                }\r\n                catch (SocketException se)\r\n                {\r\n                    stringBuilder.AppendLine(&quot;- Failed to connect to service&quot;);\r\n                    stringBuilder.AppendLine(&quot;- ERROR: &quot; + se.Message);\r\n                }\r\n                catch (Exception e)\r\n                {\r\n                    stringBuilder.AppendLine(&quot;- Failed with an unexpected error&quot;);\r\n                    stringBuilder.AppendLine(&quot;- ERROR: &quot; + e.Message);\r\n                }\r\n                if (socket.Connected)\r\n                {\r\n                    try\r\n                    {\r\n                        socket.Close();\r\n                        stringBuilder.AppendLine(&quot;- Socket closed&quot;);\r\n                    }\r\n                    catch (SocketException se)\r\n                    {\r\n                        stringBuilder.AppendLine(&quot;- Failed to close the socket&quot;);\r\n                        stringBuilder.AppendLine(&quot;- ERROR: &quot; + se.Message);\r\n                    }\r\n                    catch (Exception e)\r\n                    {\r\n                        stringBuilder.AppendLine(&quot;- Failed with an unexpected error&quot;);\r\n                        stringBuilder.AppendLine(&quot;- ERROR: &quot; + e.Message);\r\n                    }\r\n                }\r\n                socket.Dispose();\r\n            }\r\n            catch (Exception e)\r\n            {\r\n                stringBuilder.AppendLine(&quot;- Failed to create a socket&quot;);\r\n                stringBuilder.AppendLine(&quot;- ERROR: &quot; + e.Message);\r\n            }\r\n            Console.WriteLine(stringBuilder.ToString().Substring(0, stringBuilder.ToString().Length - 1));\r\n            return listening;\r\n        }\r\n    }\r\n}\r\n<\/pre>\n<p>Notes:<\/p>\n<ul>\n<li>I have verified that the code conforms to HTTP 1.1 standards. It terminates the headers section correctly with an empty line (line break without any visible characters) before sending the request.<\/li>\n<li>I understand that the extra small payload sent as a single byte with a value of 32 (which corresponds to a space character in ASCII encoding) after the initial request is a trigger for the Broker&#8217;s Registrar service to close the connection and\/or perform any necessary clean-up actions.<\/li>\n<\/ul>\n<p>The following screen shot shows the intended output of this code.<\/p>\n<p><a href=\"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/wp-content\/uploads\/2023\/06\/XDPing-csharp-e1686664837736.png\"><img fetchpriority=\"high\" decoding=\"async\" class=\"aligncenter size-full wp-image-2461\" src=\"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/wp-content\/uploads\/2023\/06\/XDPing-csharp-e1686664837736.png\" alt=\"XDPing csharp output\" width=\"680\" height=\"176\"><\/a><\/p>\n<p>Enjoy!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I wrote this C# (csharp) function back in 2020 when developing the Self-Service Session Reset Tool. I have since enhanced it for improved error checking and logging and am happy to share it here for anyone else who wants to leverage it. I released a PowerShell version back in 2019. I like to integrate these &#8230; <a title=\"XDPing C# Function\" class=\"read-more\" href=\"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/2023\/06\/13\/xdping-c-function-2443\" aria-label=\"Read more about XDPing C# Function\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[612,14,626,5,91,38,242],"tags":[544,657,581,416,658,545,656,543],"class_list":["post-2443","post","type-post","status-publish","format-standard","hentry","category-c","category-citrix","category-cvad","category-scripting","category-vdi","category-xenapp","category-xendesktop","tag-citrixcdscontrolleriregistrar","tag-broker-registrar-service","tag-c","tag-citrix","tag-csharp","tag-http1-1-100-continue","tag-registrar-service","tag-xdping"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.8 - aioseo.com -->\n\t<meta name=\"description\" content=\"I wrote this C# (csharp) function back in 2020 when developing the Self-Service Session Reset Tool. I have since enhanced it for improved error checking and logging and am happy to share it here for anyone else who wants to leverage it. I released a PowerShell version back in 2019. I like to integrate these\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Jeremy Saunders\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/2023\/06\/13\/xdping-c-function-2443\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.8\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"J House Consulting - DevOps, Microsoft, Citrix &amp; Desktop Virtualisation (VDI) Specialist - +61 413 441 846 - Delivering customer success through technology: IT Infrastructure | Citrix | End User Computing | Platform Engineering | DevOps | Full Stack Developer | Technical Architect | Improvisor | Aspiring Comedian | Midlife Adventurer\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"XDPing C# Function - J House Consulting - DevOps, Microsoft, Citrix &amp; Desktop Virtualisation (VDI) Specialist - +61 413 441 846\" \/>\n\t\t<meta property=\"og:description\" content=\"I wrote this C# (csharp) function back in 2020 when developing the Self-Service Session Reset Tool. I have since enhanced it for improved error checking and logging and am happy to share it here for anyone else who wants to leverage it. I released a PowerShell version back in 2019. I like to integrate these\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/2023\/06\/13\/xdping-c-function-2443\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/wp-content\/uploads\/2025\/06\/Blog-Banner-White-JeremySaunders-1.png\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/wp-content\/uploads\/2025\/06\/Blog-Banner-White-JeremySaunders-1.png\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2023-06-13T14:13:32+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2023-07-01T09:30:31+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"XDPing C# Function - J House Consulting - DevOps, Microsoft, Citrix &amp; Desktop Virtualisation (VDI) Specialist - +61 413 441 846\" \/>\n\t\t<meta name=\"twitter:description\" content=\"I wrote this C# (csharp) function back in 2020 when developing the Self-Service Session Reset Tool. I have since enhanced it for improved error checking and logging and am happy to share it here for anyone else who wants to leverage it. I released a PowerShell version back in 2019. I like to integrate these\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/wp-content\/uploads\/2025\/06\/Blog-Banner-White-JeremySaunders-1.png\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/www.jhouseconsulting.com\\\/jhouseconsulting\\\/2023\\\/06\\\/13\\\/xdping-c-function-2443#blogposting\",\"name\":\"XDPing C# Function - J House Consulting - DevOps, Microsoft, Citrix & Desktop Virtualisation (VDI) Specialist - +61 413 441 846\",\"headline\":\"XDPing C# Function\",\"author\":{\"@id\":\"https:\\\/\\\/www.jhouseconsulting.com\\\/jhouseconsulting\\\/author\\\/jeremy#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.jhouseconsulting.com\\\/jhouseconsulting\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.jhouseconsulting.com\\\/jhouseconsulting\\\/wp-content\\\/uploads\\\/2023\\\/06\\\/XDPing-csharp-e1686664837736.png\",\"@id\":\"https:\\\/\\\/www.jhouseconsulting.com\\\/jhouseconsulting\\\/2023\\\/06\\\/13\\\/xdping-c-function-2443\\\/#articleImage\",\"width\":680,\"height\":176,\"caption\":\"XDPing csharp output\"},\"datePublished\":\"2023-06-13T22:13:32+08:00\",\"dateModified\":\"2023-07-01T17:30:31+08:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.jhouseconsulting.com\\\/jhouseconsulting\\\/2023\\\/06\\\/13\\\/xdping-c-function-2443#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.jhouseconsulting.com\\\/jhouseconsulting\\\/2023\\\/06\\\/13\\\/xdping-c-function-2443#webpage\"},\"articleSection\":\"C#, Citrix, CVAD, Scripting, VDI, XenApp, XenDesktop, \\\/Citrix\\\/CdsController\\\/IRegistrar, Broker Registrar service, C#, Citrix, csharp, HTTP\\\/1.1 100 Continue, Registrar service, XDPing\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.jhouseconsulting.com\\\/jhouseconsulting\\\/2023\\\/06\\\/13\\\/xdping-c-function-2443#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.jhouseconsulting.com\\\/jhouseconsulting#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.jhouseconsulting.com\\\/jhouseconsulting\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.jhouseconsulting.com\\\/jhouseconsulting\\\/category\\\/scripting#listItem\",\"name\":\"Scripting\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.jhouseconsulting.com\\\/jhouseconsulting\\\/category\\\/scripting#listItem\",\"position\":2,\"name\":\"Scripting\",\"item\":\"https:\\\/\\\/www.jhouseconsulting.com\\\/jhouseconsulting\\\/category\\\/scripting\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.jhouseconsulting.com\\\/jhouseconsulting\\\/2023\\\/06\\\/13\\\/xdping-c-function-2443#listItem\",\"name\":\"XDPing C# Function\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.jhouseconsulting.com\\\/jhouseconsulting#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.jhouseconsulting.com\\\/jhouseconsulting\\\/2023\\\/06\\\/13\\\/xdping-c-function-2443#listItem\",\"position\":3,\"name\":\"XDPing C# Function\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.jhouseconsulting.com\\\/jhouseconsulting\\\/category\\\/scripting#listItem\",\"name\":\"Scripting\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.jhouseconsulting.com\\\/jhouseconsulting\\\/#organization\",\"name\":\"J House Consulting - DevOps, Microsoft, Citrix & Desktop Virtualisation (VDI) Specialist - +61 413 441 846\",\"description\":\"Delivering customer success through technology: IT Infrastructure | Citrix | End User Computing | Platform Engineering | DevOps | Full Stack Developer | Technical Architect | Improvisor | Aspiring Comedian | Midlife Adventurer\",\"url\":\"https:\\\/\\\/www.jhouseconsulting.com\\\/jhouseconsulting\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.jhouseconsulting.com\\\/jhouseconsulting\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/Blog-Banner-White-JeremySaunders-1.png\",\"@id\":\"https:\\\/\\\/www.jhouseconsulting.com\\\/jhouseconsulting\\\/2023\\\/06\\\/13\\\/xdping-c-function-2443\\\/#organizationLogo\",\"width\":1020,\"height\":200},\"image\":{\"@id\":\"https:\\\/\\\/www.jhouseconsulting.com\\\/jhouseconsulting\\\/2023\\\/06\\\/13\\\/xdping-c-function-2443\\\/#organizationLogo\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.jhouseconsulting.com\\\/jhouseconsulting\\\/author\\\/jeremy#author\",\"url\":\"https:\\\/\\\/www.jhouseconsulting.com\\\/jhouseconsulting\\\/author\\\/jeremy\",\"name\":\"Jeremy Saunders\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.jhouseconsulting.com\\\/jhouseconsulting\\\/2023\\\/06\\\/13\\\/xdping-c-function-2443#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f2d27bd3d985e6ef2024dded7c713b14440d467a6a0100aede3cfefcb4ab20f1?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Jeremy Saunders\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.jhouseconsulting.com\\\/jhouseconsulting\\\/2023\\\/06\\\/13\\\/xdping-c-function-2443#webpage\",\"url\":\"https:\\\/\\\/www.jhouseconsulting.com\\\/jhouseconsulting\\\/2023\\\/06\\\/13\\\/xdping-c-function-2443\",\"name\":\"XDPing C# Function - J House Consulting - DevOps, Microsoft, Citrix & Desktop Virtualisation (VDI) Specialist - +61 413 441 846\",\"description\":\"I wrote this C# (csharp) function back in 2020 when developing the Self-Service Session Reset Tool. I have since enhanced it for improved error checking and logging and am happy to share it here for anyone else who wants to leverage it. I released a PowerShell version back in 2019. I like to integrate these\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.jhouseconsulting.com\\\/jhouseconsulting\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.jhouseconsulting.com\\\/jhouseconsulting\\\/2023\\\/06\\\/13\\\/xdping-c-function-2443#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.jhouseconsulting.com\\\/jhouseconsulting\\\/author\\\/jeremy#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.jhouseconsulting.com\\\/jhouseconsulting\\\/author\\\/jeremy#author\"},\"datePublished\":\"2023-06-13T22:13:32+08:00\",\"dateModified\":\"2023-07-01T17:30:31+08:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.jhouseconsulting.com\\\/jhouseconsulting\\\/#website\",\"url\":\"https:\\\/\\\/www.jhouseconsulting.com\\\/jhouseconsulting\\\/\",\"name\":\"J House Consulting - DevOps, Microsoft, Citrix & Desktop Virtualisation (VDI) Specialist - +61 413 441 846\",\"description\":\"Delivering customer success through technology: IT Infrastructure | Citrix | End User Computing | Platform Engineering | DevOps | Full Stack Developer | Technical Architect | Improvisor | Aspiring Comedian | Midlife Adventurer\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.jhouseconsulting.com\\\/jhouseconsulting\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"XDPing C# Function - J House Consulting - DevOps, Microsoft, Citrix & Desktop Virtualisation (VDI) Specialist - +61 413 441 846","description":"I wrote this C# (csharp) function back in 2020 when developing the Self-Service Session Reset Tool. I have since enhanced it for improved error checking and logging and am happy to share it here for anyone else who wants to leverage it. I released a PowerShell version back in 2019. I like to integrate these","canonical_url":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/2023\/06\/13\/xdping-c-function-2443","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/2023\/06\/13\/xdping-c-function-2443#blogposting","name":"XDPing C# Function - J House Consulting - DevOps, Microsoft, Citrix & Desktop Virtualisation (VDI) Specialist - +61 413 441 846","headline":"XDPing C# Function","author":{"@id":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/author\/jeremy#author"},"publisher":{"@id":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/wp-content\/uploads\/2023\/06\/XDPing-csharp-e1686664837736.png","@id":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/2023\/06\/13\/xdping-c-function-2443\/#articleImage","width":680,"height":176,"caption":"XDPing csharp output"},"datePublished":"2023-06-13T22:13:32+08:00","dateModified":"2023-07-01T17:30:31+08:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/2023\/06\/13\/xdping-c-function-2443#webpage"},"isPartOf":{"@id":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/2023\/06\/13\/xdping-c-function-2443#webpage"},"articleSection":"C#, Citrix, CVAD, Scripting, VDI, XenApp, XenDesktop, \/Citrix\/CdsController\/IRegistrar, Broker Registrar service, C#, Citrix, csharp, HTTP\/1.1 100 Continue, Registrar service, XDPing"},{"@type":"BreadcrumbList","@id":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/2023\/06\/13\/xdping-c-function-2443#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting#listItem","position":1,"name":"Home","item":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting","nextItem":{"@type":"ListItem","@id":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/category\/scripting#listItem","name":"Scripting"}},{"@type":"ListItem","@id":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/category\/scripting#listItem","position":2,"name":"Scripting","item":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/category\/scripting","nextItem":{"@type":"ListItem","@id":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/2023\/06\/13\/xdping-c-function-2443#listItem","name":"XDPing C# Function"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/2023\/06\/13\/xdping-c-function-2443#listItem","position":3,"name":"XDPing C# Function","previousItem":{"@type":"ListItem","@id":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/category\/scripting#listItem","name":"Scripting"}}]},{"@type":"Organization","@id":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/#organization","name":"J House Consulting - DevOps, Microsoft, Citrix & Desktop Virtualisation (VDI) Specialist - +61 413 441 846","description":"Delivering customer success through technology: IT Infrastructure | Citrix | End User Computing | Platform Engineering | DevOps | Full Stack Developer | Technical Architect | Improvisor | Aspiring Comedian | Midlife Adventurer","url":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/","logo":{"@type":"ImageObject","url":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/wp-content\/uploads\/2025\/06\/Blog-Banner-White-JeremySaunders-1.png","@id":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/2023\/06\/13\/xdping-c-function-2443\/#organizationLogo","width":1020,"height":200},"image":{"@id":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/2023\/06\/13\/xdping-c-function-2443\/#organizationLogo"}},{"@type":"Person","@id":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/author\/jeremy#author","url":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/author\/jeremy","name":"Jeremy Saunders","image":{"@type":"ImageObject","@id":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/2023\/06\/13\/xdping-c-function-2443#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/f2d27bd3d985e6ef2024dded7c713b14440d467a6a0100aede3cfefcb4ab20f1?s=96&d=mm&r=g","width":96,"height":96,"caption":"Jeremy Saunders"}},{"@type":"WebPage","@id":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/2023\/06\/13\/xdping-c-function-2443#webpage","url":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/2023\/06\/13\/xdping-c-function-2443","name":"XDPing C# Function - J House Consulting - DevOps, Microsoft, Citrix & Desktop Virtualisation (VDI) Specialist - +61 413 441 846","description":"I wrote this C# (csharp) function back in 2020 when developing the Self-Service Session Reset Tool. I have since enhanced it for improved error checking and logging and am happy to share it here for anyone else who wants to leverage it. I released a PowerShell version back in 2019. I like to integrate these","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/#website"},"breadcrumb":{"@id":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/2023\/06\/13\/xdping-c-function-2443#breadcrumblist"},"author":{"@id":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/author\/jeremy#author"},"creator":{"@id":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/author\/jeremy#author"},"datePublished":"2023-06-13T22:13:32+08:00","dateModified":"2023-07-01T17:30:31+08:00"},{"@type":"WebSite","@id":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/#website","url":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/","name":"J House Consulting - DevOps, Microsoft, Citrix & Desktop Virtualisation (VDI) Specialist - +61 413 441 846","description":"Delivering customer success through technology: IT Infrastructure | Citrix | End User Computing | Platform Engineering | DevOps | Full Stack Developer | Technical Architect | Improvisor | Aspiring Comedian | Midlife Adventurer","inLanguage":"en-US","publisher":{"@id":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/#organization"}}]},"og:locale":"en_US","og:site_name":"J House Consulting - DevOps, Microsoft, Citrix &amp; Desktop Virtualisation (VDI) Specialist - +61 413 441 846 - Delivering customer success through technology: IT Infrastructure | Citrix | End User Computing | Platform Engineering | DevOps | Full Stack Developer | Technical Architect | Improvisor | Aspiring Comedian | Midlife Adventurer","og:type":"article","og:title":"XDPing C# Function - J House Consulting - DevOps, Microsoft, Citrix &amp; Desktop Virtualisation (VDI) Specialist - +61 413 441 846","og:description":"I wrote this C# (csharp) function back in 2020 when developing the Self-Service Session Reset Tool. I have since enhanced it for improved error checking and logging and am happy to share it here for anyone else who wants to leverage it. I released a PowerShell version back in 2019. I like to integrate these","og:url":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/2023\/06\/13\/xdping-c-function-2443","og:image":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/wp-content\/uploads\/2025\/06\/Blog-Banner-White-JeremySaunders-1.png","og:image:secure_url":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/wp-content\/uploads\/2025\/06\/Blog-Banner-White-JeremySaunders-1.png","article:published_time":"2023-06-13T14:13:32+00:00","article:modified_time":"2023-07-01T09:30:31+00:00","twitter:card":"summary_large_image","twitter:title":"XDPing C# Function - J House Consulting - DevOps, Microsoft, Citrix &amp; Desktop Virtualisation (VDI) Specialist - +61 413 441 846","twitter:description":"I wrote this C# (csharp) function back in 2020 when developing the Self-Service Session Reset Tool. I have since enhanced it for improved error checking and logging and am happy to share it here for anyone else who wants to leverage it. I released a PowerShell version back in 2019. I like to integrate these","twitter:image":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/wp-content\/uploads\/2025\/06\/Blog-Banner-White-JeremySaunders-1.png"},"aioseo_meta_data":{"post_id":"2443","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2025-07-04 13:45:30","updated":"2025-07-04 13:45:30","seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/category\/scripting\" title=\"Scripting\">Scripting<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tXDPing C# Function\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting"},{"label":"Scripting","link":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/category\/scripting"},{"label":"XDPing C# Function","link":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/2023\/06\/13\/xdping-c-function-2443"}],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/wp-json\/wp\/v2\/posts\/2443","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/wp-json\/wp\/v2\/comments?post=2443"}],"version-history":[{"count":5,"href":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/wp-json\/wp\/v2\/posts\/2443\/revisions"}],"predecessor-version":[{"id":2678,"href":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/wp-json\/wp\/v2\/posts\/2443\/revisions\/2678"}],"wp:attachment":[{"href":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/wp-json\/wp\/v2\/media?parent=2443"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/wp-json\/wp\/v2\/categories?post=2443"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jhouseconsulting.com\/jhouseconsulting\/wp-json\/wp\/v2\/tags?post=2443"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}