2011-01-07 7 views
7

Sto tentando di aggiungere un riferimento al servizio WCF alla mia applicazione Web utilizzando VS2010. Sembra aggiungere OK, ma il web.config non è aggiornato, il che significa ottengo un'eccezione di runtime:Quando si aggiunge il riferimento al servizio WCF, i dettagli di configurazione non vengono aggiunti a web.config

Impossibile trovare di default endpoint elemento che i riferimenti contratto 'CoolService.CoolService' nella configurazione del client ServiceModel sezione. Ciò potrebbe essere dovuto al fatto che non è stato trovato alcun file di configurazione o perché nessun elemento dell'endpoint corrispondente a questo contratto può essere trovato nell'elemento client .

Ovviamente, perché il servizio non è definito nel mio web.config. Procedura per la riproduzione:

  1. Soluzione con clic destro> Aggiungi> Nuovo progetto> Applicazione Web vuota ASP.NET.
  2. Fare clic con il tasto destro del mouse su Riferimenti servizio nella nuova app Web> Aggiungi riferimento servizio.
  3. Inserire l'indirizzo del mio servizio e fare clic su Vai. Il mio servizio è visibile nella sezione Servizi di sinistra, e posso vedere tutte le sue operazioni.
  4. Digitare uno spazio dei nomi per il mio servizio.
  5. Fare clic su OK. Il riferimento al servizio è generato correttamente e posso aprire il file Reference.cs e tutto sembra OK.
  6. Aprire il file web.config. È ancora vuoto!

    <system.web> 
        <compilation debug="true" targetFramework="4.0" /> 
    </system.web> 
    
    
    <system.serviceModel> 
        <bindings /> 
        <client /> 
    </system.serviceModel> 
    

Perché succede questo? Accade anche con un'applicazione console o con qualsiasi altro tipo di progetto che provo. Qualsiasi aiuto?

Ecco app.config dal mio servizio WCF:

<?xml version="1.0"?> 

<configuration> 

    <system.web> 
    <compilation debug="true" /> 
    </system.web> 
    <!-- When deploying the service library project, the content of the config file must be added to the host's 
    app.config file. System.Configuration does not support config files for libraries. --> 
    <system.serviceModel> 

    <services> 

     <service name="CoolSQL.Server.WCF.CoolService"> 

     <endpoint address="" 
      binding="webHttpBinding" 
      contract="CoolSQL.Server.WCF.CoolService" 
      behaviorConfiguration="SilverlightFaultBehavior"> 
      <identity> 
      <dns value="localhost" /> 
      </identity> 
     </endpoint> 

     <endpoint address="mex" 
      binding="mexHttpBinding" 
      contract="IMetadataExchange" /> 

     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:8732/Design_Time_Addresses/CoolSQL.Server.WCF/CoolService/" /> 
      </baseAddresses> 
     </host> 

     </service> 

    </services> 

    <behaviors> 
     <endpointBehaviors> 
     <behavior name="webBehavior"> 
      <webHttp /> 
     </behavior> 
     <behavior name="SilverlightFaultBehavior"> 
      <silverlightFaults /> 
     </behavior> 
     </endpointBehaviors> 
     <serviceBehaviors> 
     <behavior name=""> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 

    <bindings> 

     <webHttpBinding> 
     <binding name="DefaultBinding" 
      bypassProxyOnLocal="true" 
      useDefaultWebProxy="false" 
      hostNameComparisonMode="WeakWildcard" 
      sendTimeout="00:05:00" 
      openTimeout="00:05:00" 
      receiveTimeout="00:00:10" 
      maxReceivedMessageSize="2147483647" 
      transferMode="Streamed"> 
      <readerQuotas maxArrayLength="2147483647" 
      maxStringContentLength="2147483647" /> 
     </binding> 
     </webHttpBinding> 

    </bindings> 

    <extensions> 
     <behaviorExtensions> 
     <add name="silverlightFaults" 
      type="CoolSQL.Server.WCF.SilverlightFaultBehavior, CoolSQL.Server.WCF" /> 
     </behaviorExtensions> 
    </extensions> 

    <diagnostics> 
     <messageLogging logEntireMessage="true" 
     logMalformedMessages="false" 
     logMessagesAtServiceLevel="true" 
     logMessagesAtTransportLevel="false" 
     maxMessagesToLog="3000" 
     maxSizeOfMessageToLog="2000" /> 
    </diagnostics> 

    </system.serviceModel> 

    <startup> 
    <supportedRuntime version="v4.0" 
     sku=".NETFramework,Version=v4.0" /> 
    </startup> 

    <system.diagnostics> 
    <sources> 
     <source name="System.ServiceModel.MessageLogging" 
     switchValue="Information, ActivityTracing"> 
     <listeners> 
      <add name="messages" 
      type="System.Diagnostics.XmlWriterTraceListener" 
      initializeData="c:\messages.e2e" /> 
     </listeners> 
     </source> 
    </sources> 
    </system.diagnostics> 

</configuration> 

risposta

3

ho scoperto come lavorare intorno a questo. Il mio servizio WCF è stato implementato nel proprio progetto e ospitato da un'applicazione console separata nella stessa soluzione. Se eseguo il servizio WCF come progetto di avvio della soluzione (ad esempio, lascialo a VS per l'hosting), l'aggiunta del riferimento funziona correttamente e le linee corrette vengono aggiunte al client web.config. Ma se eseguo il servizio di hosting dall'applicazione della mia console, mentre posso ancora aggiungere il riferimento, il web.config del client non viene modificato. Quindi, una soluzione alternativa è di consentire innanzitutto a VS di ospitare il servizio, quindi aggiungere il riferimento, quindi modificare il servizio da ospitare (allo stesso indirizzo e porta) nell'applicazione console.

Questo è un comportamento sorprendente, e sono curioso di sapere se qualcuno può far luce su di esso?

+0

La configurazione lato server è nell'app console * e * nel progetto di servizio WCF? –

+0

No, solo nel progetto di servizio WCF. –

Problemi correlati