Configuring WCF for wsHttpBinding

13,510

The type of the service contract on the client which you're trying to use, based on your error messsage:

KFileService.IKFileWcfService

The type of the service contract interface which you have on your client config:

KFileWcfService.IKFileWcfService

They should be the same. Change the client config to

... contract="KFileService.IKFileWcfService" ...

And it should work.

Share:
13,510
Eric
Author by

Eric

Updated on August 31, 2022

Comments

  • Eric
    Eric over 1 year

    I have a WCF service that works using basicHttpBinding, I'm trying to configure it to go over https and authenticate with a SQL membership provider, and to do this I'm trying to convert it to use wsHttpBinding.

    However, with the updated config I get the following error when I try to connect with the client:

    Could not find default endpoint element that references contract 'KFileService.IKFileWcfService' in the ServiceModel client configuration section. This might be because no configuration file was found for your application, or because no endpoint element matching this contract could be found in the client element.

    Here's the relevant portion of the web.config for the server:

    <system.serviceModel>
        <protocolMapping>
          <remove scheme="http" />
          <add scheme="https" binding="wsHttpBinding" bindingConfiguration="wsHttpBinding_IKFileWcfServiceBinding" />
        </protocolMapping>
        <behaviors>
          <serviceBehaviors>
            <behavior name="KFileWcfServiceBehavior">
              <serviceMetadata httpGetEnabled="true" />
              <serviceDebug includeExceptionDetailInFaults="true" />
              <dataContractSerializer maxItemsInObjectGraph="2147483646" />
              <serviceCredentials>
                <userNameAuthentication userNamePasswordValidationMode="MembershipProvider"
                  membershipProviderName="SqlMembershipProvider" />
              </serviceCredentials>
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <services>
          <service behaviorConfiguration="KFileWcfServiceBehavior" name="KFileWcfService">
            <endpoint address="https://localhost:36492/KFileWcfService.svc"
              binding="wsHttpBinding" bindingConfiguration="wsHttpBinding_IKFileWcfServiceBinding"
              name="wsHttpBinding_IKFileWcfService" bindingName="wsHttpBinding_IKFileWcfServiceBinding"
              contract="KFileWcfService.IKFileWcfService">
              <identity>
                <certificateReference storeLocation="CurrentUser" />
              </identity>
            </endpoint>
          </service>
        </services>
        <serviceHostingEnvironment minFreeMemoryPercentageToActivateService="0" multipleSiteBindingsEnabled="true"/>
        <bindings>
          <wsHttpBinding>
            <binding name="wsHttpBinding_IKFileWcfServiceBinding" maxBufferPoolSize="2147483647"
              maxReceivedMessageSize="2147483647">
              <readerQuotas maxDepth="32" maxStringContentLength="100000" maxArrayLength="2147483647"
                maxBytesPerRead="4096" maxNameTableCharCount="16384" />
              <security mode="Message">
              </security>
            </binding>
          </wsHttpBinding>
        </bindings>
    </system.serviceModel>
    

    And here's the client side:

      <system.serviceModel>
        <bindings>
          <wsHttpBinding>
            <binding name="wsHttpBinding_IKFileWcfService" />
          </wsHttpBinding>
        </bindings>
        <client>
          <endpoint address="https://localhost:36492/KFileWcfService.svc"
            binding="wsHttpBinding" bindingConfiguration="wsHttpBinding_IKFileWcfService"
            contract="KFileWcfService.IKFileWcfService" name="wsHttpBinding_IKFileWcfService" />
        </client>
      </system.serviceModel>
    

    I've done my best to go through all the existing questions and examples already, but haven't had any luck. Can anyone tell me what I'm doing wrong?

    Edit:

    For further reference, here's the server side configuration that works with basicHttpBinding:

      <system.serviceModel>
        <behaviors>
          <serviceBehaviors>
            <behavior>
              <!-- To avoid disclosing metadata information, set the value below to false before deployment -->
              <serviceMetadata httpGetEnabled="true" />
              <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
              <serviceDebug includeExceptionDetailInFaults="true" />
              <dataContractSerializer maxItemsInObjectGraph="2147483646" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <services>
          <service name="KFileWcfService">
            <endpoint address="https://localhost:36492/KFileWcfService.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IKFileWcfService" contract="KFileService.IKFileWcfService" name="BasicHttpBinding_IKFileWcfService" />
          </service>
        </services>
        <serviceHostingEnvironment minFreeMemoryPercentageToActivateService="0" multipleSiteBindingsEnabled="true"/>
        <bindings>
          <basicHttpBinding>
            <binding name="BasicHttpBinding_IKFileWcfService" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" transferMode="Streamed">
              <readerQuotas maxDepth="32" maxStringContentLength="100000" maxArrayLength="2147483647" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
            </binding>
          </basicHttpBinding>
        </bindings>
    </system.serviceModel>
    

    And client:

    <system.serviceModel>
            <bindings>
                <basicHttpBinding>
                    <binding name="BasicHttpBinding_IKFileWcfService" />
                </basicHttpBinding>
            </bindings>
            <client>
                <endpoint address="https://localhost:36492/KFileWcfService.svc"
                    binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IKFileWcfService"
                    contract="KFileService.IKFileWcfService" name="BasicHttpBinding_IKFileWcfService" />
            </client>
        </system.serviceModel>