2011-05-23 11 views
9

Tengo un servicio WCF simple con enlace basicHttp. El servicio se aloja localmente (computadora portátil Win7) en IIS7. Puedo buscar el servicio en: http://localhost/musicstore/musicstore.svc (puerto 80)Llamada WCF no se muestra en Fiddler2

He desarrollado una aplicación de cliente de Windows para llamar al servicio. Funciona bien, pero realmente me gustaría ver el mensaje de llamada/respuesta a través de Fiddler2. Fiddler2 informará alegremente el tráfico mientras navego por la web, así que no puedo entender por qué no recoge esta llamada de WCF.

¿Hay otra forma de ver los datos en las llamadas WCF? Tal vez hay una herramienta de Microsoft?

La configuración de cliente es:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.serviceModel> 

    <client> 
     <endpoint address="http://localhost/musicstore/musicstore.svc" 
     binding="basicHttpBinding" bindingConfiguration="" contract="MusicStore.IMusicStore" 
     name="BasicHttp" /> 
    </client> 
    </system.serviceModel> 
</configuration> 

La configuración de servicio es:

<services> 
    <service behaviorConfiguration="MusicStoreBehavior" name="MusicStore"> 
    <endpoint address="" binding="basicHttpBinding" contract="IMusicStore"> 
    <identity> 
     <dns value="localhost" /> 
    </identity> 
    </endpoint> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
    </service> 
    </services> 

Respuesta

15

La forma más fácil de ver lo que está haciendo WCF es convertir propio registro de WCF sucesivamente. Usted puede hacer esto mediante la edición de su web.config y añadiendo

<system.diagnostics> 
    <sources> 
     <source name="System.ServiceModel.MessageLogging"> 
     <listeners> 
       <add name="messages" 
       type="System.Diagnostics.XmlWriterTraceListener" 
       initializeData="c:\logs\messages.svclog" /> 
      </listeners> 
     </source> 
    </sources> 
</system.diagnostics> 

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

MSDN tiene información más detallada sobre lo que se puede configurar. Puede ver los registros en el Service Trace Viewer.

+0

Eso funciona bien! Gracias. –

3

Puede modificar configfile de su cliente:

<configuration> 
    <system.net> 
    <defaultProxy> 
     <proxy bypassonlocal="false" usesystemdefault="true" /> 
    </defaultProxy> 
    </system.net> 
</configuration> 

o puede utilizar:

GlobalProxySelection.Select = new WebProxy("127.0.0.1", 8888); 

Desde: Fiddler site

+0

hmm, eso no parece hacer ninguna diferencia :( –

+2

+1 Fiddler actúa como un proxy web, por lo que no se detectará nada que no use el proxy. WCF, de forma predeterminada, no lo hace. – CodingWithSpike

+0

En la url proporcionada , hay otras opciones disponibles para que funcione este escenario –

0

que tenían el mismo problema y se fija de esta manera:

  1. Alojar su servicio en IIS expresar
  2. agregar un enlace a su IP LAN externa usando applicationhost.config de IISExpress en Documentos/IISExpress/config
  3. Use la configuración de proxy de Nico holandés (véase más adelante)

  4. Hacer Asegúrese de que su aplicación cliente use su IP 'externa'. Entonces 192.168.1.X en lugar de localhost.

  5. Es posible que tenga que cambiar su configuración de WCF para permitir que varios enlaces para asp.net 4,0

    <serviceHostingEnvironment multiplesitebindingsenabled="true"/> 
    
8

Hay muchos duplicados de esta pregunta, muchos de los cuales tienen respuestas correctas. Debe usar http://localhost.fiddler/ ya que el destino y .NET apropiadamente proxy la solicitud. Fiddler cambiará "localhost.fiddler" a "localhost" antes de pasar la solicitud.

Cuestiones relacionadas