2009-05-15 10 views
1

J'essaie les exemples du livre Learning WCF et j'essaie d'inspecter la requête/réponse HTTP. Je peux voir les en-têtes HTTP Request dans MS TraceViewer mais étrangement pas les en-têtes de réponse. (seulement l'enveloppe). Si vous remarquez quelque chose qui ne va pas, pourriez-vous me le faire savoir?WCF: Pourquoi HttpResponse n'est-il pas enregistré ici?

<configuration> 
    <system.serviceModel> 
    <diagnostics> 
     <messageLogging logEntireMessage="true" logMalformedMessages="true" 
     logMessagesAtServiceLevel="true"/> 
    </diagnostics> 

<!--other stuff--> 

    <system.diagnostics> 
     <sources> 
      <source name="System.ServiceModel" switchValue="Off, ActivityTracing"> 
      <listeners> 
       <add type="System.Diagnostics.DefaultTraceListener" name="Default"> 
       <filter type="" /> 
       </add> 
       <add initializeData="x.log" type="System.Diagnostics.XmlWriterTraceListener" 
       name="sdt"> 
       <filter type="" /> 
       </add> 
      </listeners> 
      </source> 
      <source name="System.ServiceModel.MessageLogging" switchValue="Verbose,ActivityTracing"> 
      <listeners> 
       <add type="System.Diagnostics.DefaultTraceListener" name="Default"> 
       <filter type="" /> 
       </add> 
       <add name="ServiceModelMessageLoggingListener"> 
       <filter type="" /> 
       </add> 
      </listeners> 
      </source> 
     </sources> 
     <sharedListeners> 
      <add initializeData="D:\temp\messages.xml" type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
      name="ServiceModelMessageLoggingListener" traceOutputOptions="Timestamp"> 
      <filter type="" /> 
      </add> 
     </sharedListeners> 
     <trace autoflush="true" /> 
     </system.diagnostics> 
</configuration> 

demande se journaliser correctement:

<MessageLogTraceRecord> 
<HttpRequest xmlns="http://schemas.microsoft.com/2004/06/ServiceModel/Management/MessageTrace"> 
<Method>POST</Method> 
<QueryString></QueryString> 
<WebHeaders> 
<SOAPAction>"http://www.thatindigogirl.com/samples/2006/06/GigManagerServiceContract/SaveGig"</SOAPAction> 
<Connection>Keep-Alive</Connection> 
<Content-Length>485</Content-Length> 
<Content-Type>text/xml; charset=utf-8</Content-Type> 
<Expect>100-continue</Expect> 
<Host>localhost:8000</Host> 
</WebHeaders> 
</HttpRequest> 
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
<s:Header> 
<To s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://localhost:8000/GigManagerService</To> 
<Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://www.thatindigogirl.com/samples/2006/06/GigManagerServiceContract/SaveGig</Action> 
</s:Header> 
<s:Body> 
<SaveGig xmlns="http://www.thatindigogirl.com/samples/2006/06"> 
<item xmlns:a="wcf_expts" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
<a:DateEnd>2009-11-01T05:30:00</a:DateEnd> 
<a:DateStart>2009-10-31T22:30:00</a:DateStart> 
<a:Description>some desc</a:Description> 
<a:Id>0</a:Id> 
<a:Place i:nil="true"></a:Place> 
<a:Title>some boring event</a:Title> 
<a:Url>http://askfdj.com</a:Url> 
</item> 
</SaveGig> 
</s:Body> 
</s:Envelope> 
</MessageLogTraceRecord> 

et la réponse que je vois dans Trace Viewer (pourquoi pas en-têtes, la réponse http?)

<MessageLogTraceRecord> 
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
<s:Header> 
<Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://www.thatindigogirl.com/samples/2006/06/GigManagerServiceContract/SaveGigResponse</Action> 
</s:Header> 
<s:Body> 
<SaveGigResponse xmlns="http://www.thatindigogirl.com/samples/2006/06"></SaveGigResponse> 
</s:Body> 
</s:Envelope> 
</MessageLogTraceRecord> 

Répondre

2

Etes-vous faire en streaming sur le côté de la réponse? Cela l'expliquerait - lorsque vous utilisez le streaming, seuls les en-têtes seront enregistrés (pas les données en streaming).

Marc

+0

C'était un avance utile. Je ne connaissais pas le mode de streaming. Cependant, il semble que le mode par défaut est Buffered et même si je l'ai explicitement mis en Buffered comme suggéré dans le lien ci-dessous, cela ne semble pas faire de différence dans mes logs. http://msdn.microsoft.com/fr-fr/library/system.servicemodel.basichttpbinding.aspx – ottodidakt

1

Si le message a été diffusé, vous verriez "... stream ..." dans la balise du corps de la trace (j'ai écrit un post on that.

Aare là d'autres têtes que la En-têtes SOAP pour une réponse à une demande HttpRequest? Je veux dire ce que vous semblez rechercher est en-têtes HttpRequest, mais la réponse n'est pas un HttpRequest.Je ne suis pas sûr, donc je peux être très faux :)

Questions connexes