none
Servicio web WCF RRS feed

  • Pregunta

  • Hola a todos, veran tengo un web service WCF lo publique en un servidor y si lo trato de ejecutar desde el mismo servidor todo funciona bien. Sin embargo al tratar de consumirlo desde una computadora cliente me da un error, me dice que no puede encontrar el tipo 'Servicio.Service1' proporcionado como el atributo service en la directiva service host.

    Alguien tiene alguna idea de porque pasa esto?

     

    muchas gracias.

     

    domingo, 3 de julio de 2011 14:04

Todas las respuestas

  • Hola Oscar:

     

    Nos puedes pasar un poco más de información Config del Servidor, Config del Cliente, StackTrace del error. Con esa información te podemos ayudar.

    Para mi es difícil decir solucionar una pregunta como esa,sin más informacion.

     

    Saludos. 

     


    phurtado
    domingo, 3 de julio de 2011 16:36
  • Claro mis disculpas por la poca informacion, Bueno veras basicamente la información de todo el entorno donde esta ocurriendo es asi.

    Tengo un Servidor con Windows Server 2008 y IIS7. Asi pues desarrollo un Web Service WCF y lo publico en el servidor. Si accedo al Web service desde el mismo servidor, es decir en un entorno local me funciona a la perfeccion todo. Sin embargo tengo una maquina que intenta acceder al servidor donde ser aloja el web service me da el siguiente error.

    Seguido esta la configuracion del Web.config y el detalle del error, Muchas gracias.

    la configuracion de mi achivo web.config es la siguiente:

     

    <?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>
        <client>
          <endpoint address="www.ojservices.com/servicio/bin" binding="basicHttpBinding"
            bindingConfiguration="" contract="Service_Saludo.IService1"
            name="Service_Saludo.Service1" />
        </client>
        <services>
          <service name="Service_Saludo.Service1">
          
            <!-- Service Endpoints -->
            <!-- Unless fully qualified, address is relative to base address supplied above -->
            <endpoint address=""  binding="wsHttpBinding" contract="Service_Saludo.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>
    <system.web>

    <customErrors mode="Off"/>

    </system.web>

    </configuration>

     

    Error en el servidor de aplicacion '/'

    Descripción: Excepción no controlada al ejecutar la solicitud Web actual. Revise el seguimiento de la pila para obtener más información acerca del error y dónde se originó en el código.

    Detalles de la excepción: System.InvalidOperationException: No se encontró el tipo 'Service_Saludo.Service1', proporcionado como el valor del atributo Service en la directiva ServiceHost.

    Error de código fuente:

    Se ha generado una excepción no controlada durante la ejecución de la solicitud Web actual. La información sobre el origen y la ubicación de la excepción pueden identificarse utilizando la excepción del seguimiento de la pila siguiente.

    Seguimiento de la pila:

    [InvalidOperationException: No se encontró el tipo 'Service_Saludo.Service1', proporcionado como el valor del atributo Service en la directiva ServiceHost.]
      System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(String constructorString, Uri[] baseAddresses) +4072054
      System.ServiceModel.HostingManager.CreateService(String normalizedVirtualPath) +11656060
      System.ServiceModel.HostingManager.ActivateService(String normalizedVirtualPath) +42
      System.ServiceModel.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath) +479
    
    [ServiceActivationException: El servicio '/servicios/Service_Saludo.Service1.svc' no se puede activar debido a una excepción producida durante la compilación. El mensaje de excepción es: No se encontró el tipo 'Service_Saludo.Service1', proporcionado como el valor del atributo Service en la directiva ServiceHost..]
      System.ServiceModel.AsyncResult.End(IAsyncResult result) +11527194
      System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result) +194
      System.ServiceModel.Activation.HostedHttpRequestAsyncResult.ExecuteSynchronous(HttpApplication context, Boolean flowContext) +176
      System.ServiceModel.Activation.HttpModule.ProcessRequest(Object sender, EventArgs e) +278
      System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +68
      System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75
    

     

    domingo, 3 de julio de 2011 17:48
  • Hola Oscar:

     

    Observo un par de cosas que te pueden estar ocasionando el problema. 

    La primera es que en el config estas mezclando parte de servidor con parte de cliente lo siguiente es de servidor :

     

     

      <services>
       <service name="Service_Saludo.Service1">
        
        <!-- Service Endpoints -->
        <!-- Unless fully qualified, address is relative to base address supplied above -->
        <endpoint address="" binding="wsHttpBinding" contract="Service_Saludo.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>
    

     

    El siguiente fragmento es de cliente:

     

     <client>
       <endpoint address="www.ojservices.com/servicio/bin" binding="basicHttpBinding"
        bindingConfiguration="" contract="Service_Saludo.IService1"
        name="Service_Saludo.Service1" />
      </client>
    

    Observa que los binding son diferentes en el seervidor utilizas wsHttpBinding y en el cliente

    basicHttpBinding.

     

    2. address www.ojservices.com/servicio/bin sustitúyelo por "http://www.ojservices.com/servicio/bin/. que acabe en "/"

     

    Te voy a pasar dos config que he creado una para el servidor y otro para el cliente


    Servidor:

     

     <system.serviceModel>
      
      
      <services>
       <service name="WcfServiceLibrary1.Service1">
        
        <host>
         <baseAddresses>
          <add baseAddress = "http://localhost:8732/Design_Time_Addresses/WcfServiceLibrary1/Service1/" />
         </baseAddresses>
        </host>
        
        <!-- Service Endpoints -->
        <!-- A menos que esté completa, la dirección está en relación con la dirección base suministrada anteriormente -->
        <endpoint address ="http://localhost:8732/Design_Time_Addresses/WcfServiceLibrary1/Service1/" binding="wsHttpBinding" contract="WcfServiceLibrary1.IService1">
         <!-- 
           Antes de la implementación, se debe quitar o reemplazar el siguiente elemento de identidad para reflejar la 
           identidad bajo la que funciona el servicio implementado. Si se quita, WCF deducirá automáticamente una identidad 
            apropiada.
         -->
         <identity>
          <dns value="localhost"/>
         </identity>
        </endpoint>
        <!-- Metadata Endpoints -->
        <!-- El servicio utiliza el extremo de intercambio de metadatos para describirse a sí mismo ante los clientes. --> 
        <!-- Este extremo no utiliza un enlace seguro, por lo que se debe proteger o quitar antes de la implementación -->
        <endpoint address="http://localhost:8732/Design_Time_Addresses/WcfServiceLibrary1/Service1/mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
       </service>
      </services>
      <behaviors>
       <serviceBehaviors>
        <behavior>
         <!-- Para evitar revelar información de los metadatos, 
         establezca el valor siguiente en false y quite el extremo superior de los metadatos antes de la implementación -->
         <serviceMetadata httpGetEnabled="True"/>
         <!-- Para recibir detalles de las excepciones en los fallos, con el fin de poder realizar la depuración, 
         establezca el valor siguiente en true. Para no revelar información sobre las excepciones 
         establézcalo en false antes de la implementación -->
         <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
       </serviceBehaviors>
      </behaviors>
     </system.serviceModel>
    

    Cliente:

     

      <system.serviceModel>
        <bindings>
          <wsHttpBinding>
            <binding name="WSHttpBinding_IService1" closeTimeout="00:01:00"
              openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
              bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
              maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
              messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
              allowCookies="false">
              <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                maxBytesPerRead="4096" maxNameTableCharCount="16384" />
              <reliableSession ordered="true" inactivityTimeout="00:10:00"
                enabled="false" />
              <security mode="Message">
                <transport clientCredentialType="Windows" proxyCredentialType="None"
                  realm="" />
                <message clientCredentialType="Windows" negotiateServiceCredential="true"
                  algorithmSuite="Default" />
              </security>
            </binding>
          </wsHttpBinding>
        </bindings>
        <client>
          <endpoint address="http://localhost:8732/Design_Time_Addresses/WcfServiceLibrary1/Service1/"
            binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IService1"
            contract="ServiceReference1.IService1" name="WSHttpBinding_IService1">
            <identity>
              <dns value="localhost" />
            </identity>
          </endpoint>
        </client>
      </system.serviceModel>
    


    Saludos,

     

     


    phurtado
    domingo, 3 de julio de 2011 18:36
  • Bueno viendo esto no me queda claro algo, esto va en el mismo archivo donde esta alojado el Web service pero diferenciando la parte cliente y la parte servidor? esque no me queda claro el proceso de publicar, porque lo que hasta el momento he visto es que por ejemplo en Visual studio le doy Publicar y el me genera los archivos necesarios y eso es lo que copio en IIS....es ese el proceso correcto? o para publicar un servicio web que este accesible al publico se debe hacer algo mas?

     

    Muchas gracias por su valiosisima ayuda..

    Saludos.

    domingo, 3 de julio de 2011 21:58
  • Hola Oscar:

     

    Una cosa es el alojamiento del servicio,  tal y como indicas el propio Visual studio ,tiene una opción para publicar el servicio que hace lo que tu dices pero lo que te he intentado transmitir es que el archivo config del servidor está mal. El publicar de Visual studio no cambia absolutamente nada del config.

     

    Deja el config tal y como te he pasado en el anterior post cambiando el parametro "address" por tu dirección y después publica.

     

    Tienes que distinguir entre la configuración del servicio para publicarlo  "Servidor" o para consumirlo "Cliente".

    Saludos.


    phurtado
    domingo, 3 de julio de 2011 22:09
  • ok ahora mi duda es, estos archivos de cliente y de servidor se hacen en 2 archivos aparte? y en donde colocar cada uno?

    Muchas gracias por su ayuda.

    lunes, 4 de julio de 2011 15:05
  • Hola Oscar:

    Yo empezaría desde cero.

     

    1. En visual studio crea un proyecto del tipo Biblioteca de Servicios WCF. Ese es tu servidor.

    2. A la misma solución le agregas por ejemplo un proyecto de tipo Wpf,WindForms el que quieras ese será tu cliente y a ese proyecto le agregas una referencia a servicio.

     

    Una vez agregues la referencia a servicio te aparece una ventana donde debes de pulsar el botón Detectar. Al pulsar aceptar sobre esa venta te creará un archivo .config, que es la configuración de tu cliente.

     

    Saludos,

    Pedro.

     

     

     


    phurtado
    lunes, 4 de julio de 2011 17:33
  • Hola Oscar:

     

    Resolviste este problema?

     

    Saludos


    phurtado
    jueves, 7 de julio de 2011 18:42