2013-08-07 21 views
5

Ho un servizio WCF che funziona utilizzando basicHttpBinding, sto provando a configurarlo per andare su https e autenticarsi con un provider di appartenenze SQL, e per farlo sto provando a convertirlo per usare wsHttpBinding .Configurazione di WCF per wsHttpBinding

Tuttavia, con la configurazione aggiornata ricevo il seguente errore quando provo a connettermi con il cliente:

Impossibile trovare elemento endpoint predefinito che contratto riferimenti 'KFileService.IKFileWcfService' nella sezione di configurazione del client ServiceModel . Ciò potrebbe essere dovuto al fatto che non è stato trovato alcun file di configurazione per l'applicazione o perché non è stato trovato alcun elemento endpoint che corrisponda a questo contratto nell'elemento client.

Ecco la quota di competenza del web.config per il 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> 

E qui è il lato client:

<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> 

Ho fatto del mio meglio per passare attraverso tutti i domande ed esempi già esistenti, ma non hanno avuto fortuna. Qualcuno può dirmi cosa sto facendo di sbagliato?

Edit:

Per ulteriori riferimenti, ecco la configurazione lato server che funziona con 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> 

e 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> 
+0

forse mostra il tuo vecchio basicHttpBinding a noi. –

+0

Aggiunto questo alla domanda. – Eric

risposta

6

Il tipo di contratto di servizio sul client che stai cercando di utilizzare, in base al tuo messaggio di errore:

KFileService.IKFileWcfService 

Il tipo di interfaccia di contratto di servizio che avete sul vostro config client:

KFileWcfService.IKFileWcfService 

Essi dovrebbe essere lo stesso. Modificare la configurazione del client per

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

e dovrebbe funzionare.

+2

Buono vecchio stackoverflow. Fornire supporto a spalla per errori di battitura. Bel pick-up –

+0

Sì, grazie! Non so per quanto tempo ancora lo avrei fissato prima di accorgermi di me stesso. Sembra che ci siano ancora alcuni problemi con la configurazione, ma questo ha risolto l'errore posto nella domanda, quindi sto contrassegnando questo come la risposta accettata. Grazie ancora! – Eric