2009-12-18 5 views
7

Toutes mes connexions sont configurées à partir de mon code, par opposition à l'utilisation de mon fichier de configuration. Comment va-t-on configurer WCF Tracing sur une connexion construite à partir de code? J'ai essayé d'ajouter le traçage au fichier de configuration, comme expliqué here, mais il ne produit aucun journal.Suivi WCF à partir du code

J'ai besoin de savoir comment le faire fonctionner à partir du fichier de configuration pour les connexions configurées en code, ou comment le configurer manuellement dans le code si quelqu'un a des informations. Merci!

EDIT: Pour ajouter un peu plus d'informations:

L'application est une application console C#, et ma liaison est déclarée comme:

private Binding getBinding() 
{ 
    NetTcpBinding tcp = new NetTcpBinding(); 
    tcp.ReaderQuotas.MaxArrayLength = 65535; 
    tcp.TransferMode = TransferMode.Streamed; 
    tcp.ReaderQuotas.MaxArrayLength = int.MaxValue; 
    tcp.ReaderQuotas.MaxDepth = int.MaxValue; 
    tcp.ReaderQuotas.MaxStringContentLength = int.MaxValue; 
    tcp.ReaderQuotas.MaxBytesPerRead = int.MaxValue; 
    tcp.ReaderQuotas.MaxNameTableCharCount = int.MaxValue; 
    tcp.MaxReceivedMessageSize = int.MaxValue; 
    return tcp; 
} 

Et je puis ajouter des services à mon application avec un générique fonction:

private List<ServiceHost> m_Hosts = new List<ServiceHost>(); 
private static List<string> m_Services = new List<string>(); 

public void AddHost<T1, T2>(string uri) 
    where T1 : class 
    where T2 : class 
{ 
    m_Services.Add("net.tcp://<ipaddress>:<port>/" + uri); 
    m_Hosts.Add(new ServiceHost(typeof(T1))); 
    m_Hosts[m_Hosts.Count - 1].AddServiceEndpoint(typeof(T2), getBinding(), m_Services[m_Services.Count - 1]); 
} 

Il ya évidemment un peu plus de code pour que tout cela fonctionne, mais cela devrait donner toutes les parties pertinentes.

Répondre

5

Vous trouverez ci-dessous un exemple de .config pour activer le suivi si vous souhaitez effectuer une autre tentative. Assurez-vous que le fichier .config se trouve dans le même dossier de votre hôte de service WCF.

<configuration> 
    <system.diagnostics> 
    <sources> 
     <source name="System.ServiceModel" switchValue="Warning" propagateActivity="true" > 
     <listeners> 
      <add name="xml"/> 
     </listeners> 
     </source> 

     <source name="myUserTraceSource" switchValue="Warning, ActivityTracing"> 
     <listeners> 
      <add name="xml"/> 
     </listeners> 
     </source> 
    </sources> 

    <sharedListeners> 
     <add name="xml" 
      type="System.Diagnostics.XmlWriterTraceListener" 
      initializeData="TraceLog.svclog" /> 
    </sharedListeners> 

    </system.diagnostics> 
</configuration> 

Microsoft fournit un fichier Service Trace Viewer Tool pour lire les fichiers .svclog.

Assurez-vous que le chemin dans lequel vous allez enregistrer le fichier .svclog dispose des autorisations d'écriture nécessaires.

+1

Vous voulez vous assurer que l'attribut 'initializeData =' a le nom d'un fichier dans un dossier emplacement qui est accessible en écriture par votre service. Sinon, rien n'est écrit. –

+0

Rien du tout ... Il ne lance aucune exception ou quoi que ce soit, mais il ne crée pas non plus de fichier journal. –

+0

@ md5sum: Pouvez-vous vérifier que votre fichier 'app.config' est lu par l'application hôte? Par exemple, essayez d'ajouter '' dans votre 'app.config' et essayez de le lire avec' System.Configuration.ConfigurationSettings.AppSettings ["TEST_KEY "]' depuis votre application hôte. –

Questions connexes