I have an autogenerated binding from a WSDL file in a Visual Studio project that looks like this:
<binding name="XServiceSoap" 
         maxBufferPoolSize="16777216"
         maxBufferSize="16777216" 
         maxReceivedMessageSize="16777216">
    <security mode="TransportCredentialOnly">
        <transport clientCredentialType="Ntlm" 
                   proxyCredentialType="None"/>
    </security>
</binding>
and the client looks like this:
<endpoint address="http://uri/XService.asmx"
          binding="basicHttpBinding" 
          bindingConfiguration="XServiceSoap"
          contract="XService.XServiceSoap" 
          name="XServiceSoap"/>
In the code, I'm easily able to change the endpoint address (and credentials) using
using WPFApp.XService;
var xServiceSoapClient = new XServiceSoapClient("XServiceSoap");
xServiceSoapClient.Endpoint.Address = new EndpointAddress(NEW_ENDPOINT);
xServiceSoapClient
    .ClientCredentials.Windows.ClientCredential.UserName = NEW_USERNAME;
xServiceSoapClient
    .ClientCredentials.Windows.ClientCredential.Password = NEW_PASSWORD;
But if I try using a non-http endpoint, I got thrown an exception The provided URI scheme 'https' is invalid; expected 'http'.
This error makes sense to me (ex. from here), but I want the same binding to support both HTTP and HTTPS when I change the endpoint (test vs prod server). How do I do this in code with the built in soap client? I don't see an option in the xServiceSoapClient to change the security mode, ex. I don't see a XServiceSoapclient.Security.Mode option where it can be changed.
I can confirm when I change the app.config manually from TransportCredentialOnly to Transport, https connections work without throwing an exception.
Thank you!
 
     
    