-->

wsHTTPBinding over HTTPS causes Error 400 'Bad

2019-07-18 05:21发布

问题:

I've been trying to create a simple service to allow messages to be logged onto a remote server via WCF, which all worked fine until I published the service to the live environment, which uses HTTPS.

After some searching, I found that I needed to change my ServiceConfig to account for the different protocol. I used a combination of these two articles:

  1. How to configure WCF services to work through HTTPS without HTTP binding?
  2. WCF Bindings needed for HTTPS

Having made the recommended changes to my config, I seem to be in a state where I can add the live service as a WCF reference in VS2010, but when I use IE to browse to the service or the mex address, I'm consistently receiving an 'HTTP 400 Bad Request' error.

In terms of using the service I can seem to run it successfully but the mex just doesn't want to work through IE.

The Service itself is being hosted on Windows Server 2003 R2 Standard Edition SP2 Running IIS 6.0 with no load balancing.

I'm really at a loss at this point, I've spent 3-4 days messing around with this but I can't seem to make any progress. So any help would be greatly appreciated.

See below the Server service config in question:

  <system.serviceModel> 
    <services>
      <service name="mycorp.Callback.SecPayService" behaviorConfiguration="mycorp.Callback.SecPayServiceBehavior">
         <endpoint address="https://myserver.co.uk/SecPay/SecPayService.svc"
                   binding="wsHttpBinding" bindingConfiguration="TransportBinding" 
                   contract="mycorp.Callback.ISecPayService"/>      
        <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />        
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="mycorp.Callback.SecPayServiceBehavior">
          <serviceMetadata httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <wsHttpBinding>
        <binding name="TransportBinding">
          <security mode="Transport">
            <transport clientCredentialType="None" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
  </system.serviceModel>

回答1:

If you are hosting your service in IIS then just have the endpoint elements address value to empty string as the address for the endpoint is assigned by IIS