Resolving Remote Windows Azure IP Addresses

Published on
10,395 Points
1 Endorsement
Last Modified:
Today I had a very interesting conundrum that had to get solved quickly. Needless to say, it wasn't resolved quickly because when we needed it we were very rushed, but as soon as the conference call was over and I took a step back I saw the correct answer immediately. Good old IPAddress(). <-- Not really.  =/   Why not?  

The crux of the issue is this: IPAddress in the .NET Framework v4.x has no way to resolve a host name back to a valid IP address. You have to use the DNS class instead.

Here's the problem:
Whenever I ran the following code it always threw the following exception:
var targetHostAddress = "http://myStagingSubDomain.cloudapp.net";
var ipAddresses = Dns.GetHostAddresses(targetHostAddress); <-- exception was being thrown here...
var ipAddress = ipAddresses[0];

using (var client = new TcpClient())
    client.Connect(ipAddress, port);
    Console.WriteLine("{0}Connected to {1}:{2}.", Environment.NewLine, ipAddress.ToString(), port.ToString());

Open in new window

The Exception:
No such host is known --> System.Net.Sockets.SocketError.HostNotFound

Great. Then I realized that it just might be because I was including the address as presented in the browser... so what if I shaved off the protocal and trailing slash? Eureka! That worked!

All's good then, right? Nope. You have to do just a little more juggling to accomodate the possible peculiarities in your network/subdomain/whatever. How do I know this? Because when substituted "localhost" or "" for the address I still got the exception : "No connection could be made because the target machine actively refused it"

Ok, Here's The Scenario:
1. We are deploying a service with multiple TCP/IP listeners to Windows Azure.
2. One of those listeners is the target.
3. We know Windows Azure IP addresses are subject to change without warning.
4. We also know that eventually that switching could be "on purpose", or rather the result of load balancing and not security/maintenance.
5. We need to find the IP address automatically and without human interaction.
6. We need to be able to test the solution locally, then deploy it to the cloud without changing anything but the targetHostAddress.
var targetHostAddress = "localhost"; // "{substitute_your_windows_azure_host_name_instead_here--don't_include_the_protocol_or_trailing_slash}";
var ipAddresses = Dns.GetHostAddresses(targetHostAddress);
var ipAddress = !targetHostAddress.Contains("localhost") ? ipAddresses[0] : ipAddresses[1];

Open in new window

... notice the host name test in the 3rd line? That's important (at least in my office anyway...), because ipAddress[0] was actually "::1", NOT "" like I expected. For the life of me I couldn't figure out why I kept getting that exception until I added a few more breakpoints. Never assume that would should be is... trust, but verify.

I hope this saves you some valuable time. I know it would've saved me at least an hour between deployments and testing.  =/

Featured Post

Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

Join & Write a Comment

How to fix display issue, screen flickering issue when I plug in power cord to the machine. Before I start explaining the solution lets check out once the issue how it looks like after I connect the power cord. most of you also have faced this…
If you are looking for an automated solution for backup single or multiple Office 365 user mailboxes to Outlook data file, then you can use Kernel Office 365 Backup & Restore tool. Go through the video to check out the steps to backup single or mult…

Keep in touch with Experts Exchange

Tech news and trends delivered to your inbox every month