2011-01-07 11 views
7

Próbuję dodać odwołanie do usługi WCF do mojej aplikacji sieci Web przy użyciu VS2010. Wydaje się, aby dodać OK, ale web.config nie jest aktualizowana, co oznacza, otrzymuję wyjątek środowiska wykonawczego:Podczas dodawania odwołania do usługi WCF szczegóły konfiguracji nie są dodawane do pliku web.config

Nie można znaleźć domyślnego Endpoint element, który kontrakt odniesienia „CoolService.CoolService” w konfiguracji klienta ServiceModel Sekcja . Może to być spowodowane tym, że nie znaleziono pliku konfiguracyjnego dla Twojej aplikacji lub ponieważ w elemencie klienta nie znaleziono elementu końcowego zgodnego z tą umową .

Oczywiście, ponieważ usługa nie jest zdefiniowana w moim pliku web.config. Kroki prowadzące do odtworzenia:

  1. Rozwiązanie prawym przyciskiem myszy> Dodaj> Nowy projekt> Pusta aplikacja ASP.NET.
  2. Kliknij prawym przyciskiem myszy Odsyłacze serwisowe w nowej aplikacji internetowej> Dodaj odniesienie do usługi.
  3. Wprowadź adres mojej usługi i kliknij Przejdź. Moja usługa jest widoczna w sekcji Usługi po lewej stronie i widzę wszystkie jej operacje.
  4. Wpisz przestrzeń nazw dla mojej usługi.
  5. Kliknij OK. Odwołanie do usługi jest generowane poprawnie i mogę otworzyć plik Reference.cs i wszystko wygląda OK.
  6. Otwórz plik web.config. Jest nadal pusty!

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

Dlaczego tak się dzieje? Dzieje się tak również w przypadku aplikacji konsolowej lub dowolnego innego typu projektu, który próbuję. Jakaś pomoc?

Oto app.config z moim usług 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> 

Odpowiedz

3

odkryłem jak to obejść. Moja usługa WCF została zaimplementowana we własnym projekcie i hostowana przez osobną aplikację konsolową w tym samym rozwiązaniu. Jeśli uruchomię usługę WCF jako projekt uruchamiania rozwiązania (np. Niech host VS go obsługuje), dodanie odwołania działa dobrze, a poprawne linie są dodawane do klienta web.config. Ale jeśli hostuję usługę z poziomu mojej aplikacji konsolowej, podczas gdy wciąż mogę dodać referencję, plik web.config klienta nie zostanie zmodyfikowany. Tak więc obejście problemu polega na tym, aby najpierw umożliwić VS hostowanie usługi, a następnie dodać odwołanie, a następnie zmienić usługę, która ma być hostowana (na tym samym adresie i porcie) w aplikacji konsoli.

To zaskakujące zachowanie i jestem ciekawy, czy ktoś może rzucić na niego jakiekolwiek światło?

+0

Czy konfiguracja po stronie serwera znajduje się w aplikacji konsolowej * i * projekcie usługi WCF? –

+0

Nie, tylko w projekcie usługi WCF. –

Powiązane problemy