I wrote earlier about how to write a Service that listens on any free port. If you are programming at the Channel/Binding layer directly, the easiest way to autogenerate a ListenUri is to call the following method on your Binding:
public IChannelListener<TChannel> BuildChannelListener<TChannel>(params object[] parameters)For example: myListener = myBinding.BuildChannelListener<IInputChannel>();
The base class will expand this call out to create a Listener using the scheme from the binding, the hostname of the machine, and ListenUriMode.Unique to generate the rest of the ListenUri:
UriBuilder listenUriBuilder = new UriBuilder(this.Scheme, machineName);
return this.BuildChannelListener<TChannel>(listenUriBuilder.Uri, string.Empty, ListenUriMode.Unique, parameters);