2010-01-20 12 views
15

Tengo un servicio WCF alojado en IIS 7.5. Tengo dos servidores, uno para prueba y otro para producción.Alojamiento WCF: puede acceder al archivo svc pero no puede ir al enlace wsdl

El servicio funciona bien en el servidor de prueba, pero en el servidor de producción tengo el siguiente error.

Cuando tengo acceso a la dirección http //..../ service.svc puedo ver la página por defecto que dice:


Se ha creado un servicio.

Para probar este servicio, deberá crear un cliente y usarlo para llamar al servicio. Para ello, puede utilizar la herramienta svcutil.exe desde la línea de comandos con la siguiente sintaxis:

svcutil.exe http://..../service.svc?wsdl

Esto generará un archivo de configuración y un archivo de código que contiene la clase de cliente. Agregue los dos archivos a su aplicación cliente y use la clase de cliente generada para llamar al Servicio.


Pero cuando hago clic en el enlace WSDL, no puedo ir a la página WSDL. Me devuelve a esta página web predeterminada sin ningún error. Estoy sospechando de un error de autorización de red/firewall pero ¿alguien tiene una experiencia como esta?

Todas las configuraciones de IIS son las mismas para los servidores de prueba y producción.

Gracias, saludos cordiales.

+0

¿tiene configurado un punto final mex? –

+0

sí, tengo punto final mex. –

+0

¿Tiene algún tipo de enrutador/equilibrador de carga en frente de su servicio para introducir problemas de redirección? –

Respuesta

12

que básicamente necesita tres cosas para permitir la navegación a su WSDL para un servicio WCF:

  1. un comportamiento en servicio que permite a los metadatos del servicio
  2. establecer el httpGetEnabled = True en que el comportamiento de servicio de metadatos para permitir la navegación HTTP a que los metadatos
  3. un mex punto final en su servicio

Así que su config en el poder del lado del servidor se ve algo como esto (además de un poco más Stu ff):

<system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="MetadataBehavior"> 
      <serviceMetadata httpGetEnabled="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 

    <services> 
     <service behaviorConfiguration="MetadataBehavior" name="YourService"> 
     <endpoint address="" 
        binding="basicHttpBinding" 
        contract="IYourService" /> 
     <endpoint address="mex" 
        binding="mexHttpBinding" 
        contract="IMetadataExchange" /> 
     </service> 
    </services> 
    </system.serviceModel> 

los puntos 1 y 2 son manejados por esta línea aquí:

<serviceMetadata httpGetEnabled="true" /> 

necesita hacer referencia que el comportamiento del servicio en su etiqueta <service> para que se active.

Punto 3 (MEX punto final) es esta sección aquí:

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

para HTTP, utilice el mexHttpBinding, y el contrato es un contrato IMetadataExchange sistema de WCF para el intercambio de metadatos.

+0

Estoy de acuerdo. Todas estas configuraciones fueron configuradas correctamente. Olvidé mencionar un detalle importante: el servicio funciona bien en mi servidor de prueba, pero este error surgió cuando implementé el servicio en mi servidor de producción. Lo siento por los inconvenientes ocasionados. –

10

tuvo el mismo problema.i fijo añadiendo httpsGetEnabled a serviceBehaviors> comportamiento de la siguiente manera:

<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/> 

tal vez ayude a alguien más. no creo que necesite esta pista después de 4 años =)

+1

No puedo votar esto lo suficiente. Mi problema era que tenía muchos servicios con WSDL en funcionamiento, pero uno sin ellos. El que no funcionó necesitaba ser "http ** s ** GetEnabled" (con la "s") en lugar de solo "httpGetEnabled". – Turnerj

-1

Sí, el problema es con la publicación de metadatos. Solo agregando uno más consejos. También se pueden añadir servicios de metadatos utilizando el código, así:

ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); 
smb.HttpGetEnabled = true; 

host.Description.Behaviors.Add(smb); 

Más detalles aquí: http://msdn.microsoft.com/en-us/library/aa738489%28v=vs.110%29.aspx

1

sé que la respuesta sea tan tarde pero tuve el mismo problema y la solución fue:

Agregue etiquetas [ServiceContract] y [OperationContract] en la interfaz que se implementa en el servicio .svc. Visual Studio crea interfaz cuando selecciona WCF Service pero eliminé la interfaz y creé mi propia interfaz.

[ServiceContract] 
public interface IService1 
{ 
    [OperationContract] 
    void DoWork(); 
} 

Espero ayudar a alguien.

Cuestiones relacionadas