Today I was running a demo on WCF duplex communication with wsDualHttpBinding. My demo was pretty basic so it was created through standard stuff. I created the demo in VS2005 running on Vista. I distributed the sample and when people ran it on Windows XP the client terminated with the error: "HTTP could not register URL
htp://+:80/Temporary_Listen_Addresses/ because TCP port 80 is being used by another application.". At first this seemed odd to me because I was wondering why the client tried to communicate on port 80. I am/was used to programming with sockets and remoting where client picked a random free port to establish communication from server to client. Apparently WCF creates a HTTP socket on port 80 to service client callbacks. Clearly the client was conflicting with IIS on XP while this was not the case on Vista. This behavior is due to the nature of the architecture of IIS 6.X and IIS 7. All HTTP-protocol traffic in IIS6.X/7 gets routed through the http.sys, kernel mode component. Even when you create a selfhosted application or client which uses http, the traffic gets routed through http.sys. http.sys dispatches all requests to a worker process, so all that http.sys had to do is send the request to our client application in stead of the default w3wp.exe IIS worker process. XP still uses IIS 5.X, whom doesn't have this kernel architecture, so trying to open an additional socket on port 80 clearly conflicts with IIS 5.X. To resolve this problem you have to provide a clientBaseAddress in the binding configuration on the client.

null

Also testing multiple clients on XP this way isn't really feasable. You will have to provide the clientBaseAddress in code and associate a different port with each client.

For more information see the hosting services article and the duplex services article on msdn