If you select the web project in the Solution Explorer, you can change a property in the Properties tool window that will stop the port from changing. The property is called "Use dynamic ports" and you want to set it to false so that the port remains static.
You can also specify the port number in these settings.
Note that this is not in the project's property pages, but in the Properties tool window (which is probably why it's so hard to find - took me quite some time to work this one out myself).
Update
To switch between deployment and development, I tend to specify two SOAP bindings and then use #ifdef DEBUG
to switch the binding of my SOAP client based on the type of build. The DEBUG build points to the development services, and the RELEASE build points to the deployed services.
So, my ClientConfig is something like:
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="Soap_Debug" maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647">
<security mode="None" />
</binding>
<binding name="Soap_Release" maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647">
<security mode="None" />
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://www.mymadeupurl.com/myservices.asmx"
binding="basicHttpBinding" bindingConfiguration="Soap_Release"
contract="MyServices.MyServicesSoap" name="Soap_Release" />
<endpoint address="http://localhost:1929/mydservices.asmx"
binding="basicHttpBinding" bindingConfiguration="Soap_Debug"
contract="MyServices.MyServicesSoap" name="Soap_Debug" />
</client>
</system.serviceModel>
</configuration>
I create instances of the SOAP client like this:
#if DEBUG
// localhost hosts the web services in debug builds.
soapClient = new MyServicesSoapClient("Soap_Debug");
#else
// The web services are hosted in a different location for release builds.
soapClient = new MyServicesSoapClient("Soap_Release");
#endif