WCF design_time_address no se muestra en Visual Studio 2010

Actualmente tengo un proyecto de biblioteca de servicios de wcf que incluye mi contrato de servicio e implementación. Si tuviera que ir a un proyecto web dentro de la misma solución y agregar una referencia de servicio y hacer clic en el botón descubrir, puedo ver mi servicio en la lista como http://..design_time_address/myservice listado.

Ahora, si tuviera que seguir adelante y mover mi contrato de servicio y clases de implementación a otro proyecto y configurar mi proyecto de biblioteca wcf para apuntar a este nuevo proyecto, me doy cuenta de que cuando voy y trato de descubrir el servicio dentro de mi aplicación web, Ya no veo design_time_address. No es descubrir nada ...

Así es como se veía mi app.config para el servicio wcf antes de mover las clases a un nuevo proyecto

<?xml version="1.0" encoding="utf-8" ?>
<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="Test.Server.Wcf.Service1">
        <host>
          <baseAddresses>
            <add baseAddress = "http://localhost:8732/Design_Time_Addresses/Test.Server.Wcf/Service1/" />
          </baseAddresses>
        </host>
        <!-- Service Endpoints -->
        <!-- Unless fully qualified, address is relative to base address supplied above -->
        <endpoint address ="" binding="wsHttpBinding" contract="Test.Server.Wcf.IService1">
          <!-- 
              Upon deployment, the following identity element should be removed or replaced to reflect the 
              identity under which the deployed service runs.  If removed, WCF will infer an appropriate identity 
              automatically.
          -->
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <!-- Metadata Endpoints -->
        <!-- The Metadata Exchange endpoint is used by the service to describe itself to clients. --> 
        <!-- This endpoint does not use a secure binding and should be secured or removed before deployment -->
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- To avoid disclosing metadata information, 
          set the value below to false and remove the metadata endpoint above 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="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

</configuration>

y así es como se ve después de la mudanza

<?xml version="1.0" encoding="utf-8" ?>
<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="Test.Server.Core.Service1">
        <host>
          <baseAddresses>
            <add baseAddress = "http://localhost:8732/Design_Time_Addresses/Test.Server.Wcf/Service1/" />
          </baseAddresses>
        </host>
        <!-- Service Endpoints -->
        <!-- Unless fully qualified, address is relative to base address supplied above -->
        <endpoint address ="" binding="wsHttpBinding" contract="Test.Server.Core.IService1">
          <!-- 
              Upon deployment, the following identity element should be removed or replaced to reflect the 
              identity under which the deployed service runs.  If removed, WCF will infer an appropriate identity 
              automatically.
          -->
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <!-- Metadata Endpoints -->
        <!-- The Metadata Exchange endpoint is used by the service to describe itself to clients. --> 
        <!-- This endpoint does not use a secure binding and should be secured or removed before deployment -->
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- To avoid disclosing metadata information, 
          set the value below to false and remove the metadata endpoint above 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="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

</configuration>

¿Qué estoy haciendo incorrectamente? Cualquier ayuda será muy apreciada. He estado atascado en esto durante horas y siento que estoy perdiendo la cabeza ...

Muchas Gracias

preguntado el 08 de noviembre de 11 a las 16:11

Cuando dices "mover" los archivos, ¿eso es todo lo que hiciste? Debe agregar "Agregar proyecto existente ..." -

sí, eso fue lo que quise decir con configurar. Lo siento, debería haberlo especificado más claramente. -

1 Respuestas

La Descubre La opción que usa para agregar una referencia de servicio es una función interna de Visual Studio. Lo que hace es iniciar y enumerar los servicios WCF para los que realmente puede encontrar una implementación. Por alguna razón, quiere encontrar la implementación de la interfaz de servicio en un tipo de proyecto WCF (biblioteca o aplicación) con un archivo de configuración. Entonces, si movió su implementación al proyecto Core que es una biblioteca de clases regular sin el archivo app.config, no lo hará Descubre su servicio nunca más.

Lo que puede hacer es iniciar su servicio manualmente y navegar a la URL para agregar una referencia de servicio. Es solo la opción de descubrimiento que ya no funciona.

respondido 09 nov., 11:01

¿Cómo iniciaría mi servicio manualmente dentro de Visual Studio? Intenté configurar el proyecto como proyecto de inicio y luego presionar el botón de inicio de depuración, pero me da el mensaje 'El ensamblaje de destino no contiene tipos de servicio. Es posible que deba ajustar la política de seguridad de acceso al código de este ensamblado 'y luego deja de ejecutarse. ¡Gracias por tu ayuda! - zSinopsis

Ah, ese es el truco :-) Normalmente inicio un segundo Visual Studio para iniciar una sesión de depuración en el servicio y uso la instancia original para crear una referencia de servicio. Si su servicio WCF está implementado en IIS (como una aplicación WCF), puede publicar su servicio y simplemente hacer referencia a esa URL (aunque tendrá que cambiar la dirección en tiempo de diseño). - kroonwijk

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.