tags:

views:

21

answers:

1

I am trying to configure my WCF Service to be HTTPS. I have configured the behaviors and the services with the relevant addresses but I cannot understand why the address which is supplied to the service host is still http.

The behavior I am using is here:

    <behavior name="RequestProcessorBehavior">
      <serviceCredentials>
        <userNameAuthentication 
          userNamePasswordValidationMode="Custom" 
          customUserNamePasswordValidatorType="ServiceAuthentication,Services"/>
      </serviceCredentials>
      <serviceMetadata httpsGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
      <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
      <serviceThrottling maxConcurrentCalls="500" maxConcurrentInstances="500"/>
    </behavior>

The service element is here

<service name="MyNamespace.WcfRequestProcessor" behaviorConfiguration="RequestProcessorBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="https://xxxxxxxxxxxxxx/Services/"/&gt;
          </baseAddresses>
        </host>
        <!-- 
          Use the listenUri attribute if this causes a problem with the load balancer.
          The url of the listenUri should be that of the load balancer
        -->
        <endpoint address=""
                  bindingNamespace="https://xxxxxxxxxxxxxx/Services/"
                  contract="MyNamespace.IWcfRequestProcessor"
                  binding="basicHttpBinding"
                  bindingConfiguration="RequestProcessorBinding">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint address="wsHttpBinding"
                  bindingNamespace="https://xxxxxxxxxxxxxx/Services/"
                  contract="MyNamespace.IWcfRequestProcessor"
                  binding="wsHttpBinding"
                  bindingConfiguration="wsBinding">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
      </service>

When I add a breakpoint onto the constructor of the ServiceHost I can see that the baseAddresses parameter contains only one address and that is http and not https. When i try to visit the svc page I get the following error and I can see why it would show that but I cannot see what I can change to make the baseAddress which gets passed to the ServiceHost constructor https and not http.

Could not find a base address that matches scheme https for the endpoint with binding BasicHttpBinding. Registered base address schemes are [http].

Any help would be greatly appreciated.


UPDATE #1

The binding configuration section which I left out of the original question:

<bindings>
  <basicHttpBinding>
    <binding name="RequestProcessorBinding" maxReceivedMessageSize="2147483647" receiveTimeout="00:30:00" sendTimeout="00:30:00">
      <readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647"/>
      <security mode="Transport">
        <transport clientCredentialType="None"/>
      </security>
    </binding>
  </basicHttpBinding>
</bindings>

This is currently inside a development environment and in IIS6. This is inside the Default Website.

+1  A: 

Are you running on IIS or self hosted? If it's IIS, you need to have IIS configured correctly for SSL. Also, you don't mention what your binding configuration looks like, but it needs to be set to enable transport security as well.

tomasr
I have updated the question to provide the missing bits of information you requested
REA_ANDREW
Looks like your IIS configuration is incorrect. Did you enable HTTPS on IIS and configure a server side certificate? (see http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/56bdf977-14f8-4867-9c51-34c346d48b04.mspx?mfr=true)
tomasr
You are correct it was the IIS Configuration. Thanks for your time. :-)
REA_ANDREW