I'm writing a windows service which will expose an http RESTful web service for other processes on the machine. This will be deployed to lots of machines on various corporate desktops that I have little/no control over. How should I choose which port my service should listen on?
I'll make it configurable, but need to know how to choose some reasonable default(s).
fyi I'm planning on using .NET 3.5 (unable to use 4.0 for deployment reasons) and WCF with WCF REST Starter Toolkit.
UPDATE: to clarify, these are corporate non-development machines. I want to choose a port that's not likely to be used for anything else. I guess from this list of PORT NUMBERS (thanks @Pascal Thivent) that I should choose one in the dynamic/private range
The Dynamic and/or Private Ports are those from 49152 through 65535
So is there any better way of choosing a port within that range, or do I just choose randomly?
The official assignments registred with the Internet Assigned Numbers Authority (IANA) for HTTP are:
- 80: standard port for HTTP,
- 8080: HTTP alternate (commonly used by cache or proxy or web server running as a non-root user)
The ports below are non official ports (not registered with IANA) that are also used:
- 8081: HTTP alternate
- 8090: HTTP alternate (used as an alternative to port 8080)
I don't know what kind of machines you are targeting but if they include development machines, I would probably use 8090 to minimize possible conflicts.
References
- PORT NUMBERS
- List of TCP and UDP port numbers
Ultimately we chose an arbitrary unused port in the Registered Port range - from 1024 through 49151 - and then made it configurable on the offchance someone comes along and uses that port for something else. Best solution would then be to register that port.
We chose not to use a dynamic port as processes are able to arbitrarily start using them, so it'd be less consistent whether the port was available.
If your service is HTTP then you should use port 80 - the standard HTTP port. This is typical of most REST webservices.