(The correct solution is for the IIS servers to stump up and pay for static IP addresses. I don't like the solution below, as it won't be "server grade" stable. I have not gone into security implications - run appropriate firewalls and/or port limits as appropriate)
There are 2 parts to the solution - part one is to make the webservers "reachable" by "the Cloud". To do this I would use OpenVPN (this could be substituted for other tunnels or VPNS) - Specifically I would run a VPN server "in the cloud", and have each .Net App server communicate with the OpenVPN server in the cloud. I like OpenVPN because it can be fairly responsive to re-establishing when IP addresses change, and it uses UDP and is easy and ubiquitous.
The second part is getting your data to the world. There are lots of solutions depending on your exact requirements. One such solution would be to run a reverse proxy like Apache or NGINX with proxy_pass rules. You can access the remote servers by their OpenVPN IP RFC 1918 addresses and have mod_proxy do the direction. The simplest way would be to have the Apache and OpenVPN service on the same VPN, but you could have them in the same network on different VMs for scalability if you handle the network routing. (Remember that you need to have both a static external IP and VPN "internal/RFC1918" IPs able to reach each other.
Of-course, you don't have to use Apache or NGINX. You could use Squid and caching of the static content, or even do away with a proxy altogether and use IPTables DNAT rules on the VPN box if you are OK having the servers reached on separate ports.