Domanda

Oltre un anno fa avevo lavorato a un servizio WCF, che ho scritto usando VS 2008. Funziona sotto un servizio Windows, che ho anche scritto. Da allora è corso lì. E sfortunatamente, altri progetti/priorità sono emersi, impedendo a me di continuare con quel progetto, fino ad ora.

Ora sto cercando di tornare. Tuttavia, questo va in giro, sto cercando di scoprire se posso usare VS 2010 e .NET 4, anziché .NET 3.5. Ho emesso il prompt dei comandi, per eseguire Svcutil, per ottenere le informazioni WSDL, che inserirò nel file di configurazione per la nuova app WPF che sto cercando di iniziare a scrivere. L'unica cosa è che continuo a ricevere un errore, dicendo che non posso raggiungere il server, ecc.

Quindi, ho copiato il file .exe.config dal server alla mia macchina, dove ho potuto modificarlo con SVConfigEditor. Ho apportato quelle modifiche, l'ho rimesso sul server e ho ricevuto un errore mentre cercavo di eseguire SVCutil, ma peggio di quello non ho visto i file .svclog che mi aspettavo di vedere. Quindi sono entrato nell'app di servizi del server. Ho trovato il servizio Windows che ho scritto un anno fa; Ho visto che stava correndo, si è fermato e ha ricominciato.

Ora ho un problema diverso. Il mio servizio Windows inizia, ma poi si ferma immediatamente. Ricevo questo messaggio che dice che il servizio era iniziato e poi si è fermato, e dicendo che a volte ciò accade con diversi tipi di servizi, come registri delle prestazioni e servizi di avviso. Ho controllato il registro degli eventi sul server, quindi solo la cosa relativa a questo servizio Windows è che è entrato nello stato di avvio e quindi inserito nello stato arrestato.

Ah, dopo aver tentato di avviarlo 4 volte, mi ha finalmente dato un errore nel registro degli eventi! (Perché non lo ha fatto in primo luogo? E chi dice che cercare di fare la stessa cosa più e più volte, e aspettarsi risultati diversi è un segno di follia, quando chiaramente le prime 3 volte non hanno registrato nulla Nel registro degli eventi, ma il 4 ° prova lo ha fatto.)

Ecco l'errore:

Tipo di evento: ERRORE EVENTE EVENZA: SERVIZI1 Categoria Evento: Nessuno ID evento: 0 Data: 5/4/2011 Ora: 10:14:46 AM Utente: N/A Computer: Helios Descrizione: il servizio non può essere avviato. System.TypeInitializationException: l'inizializzatore di tipo per 'System.Servicemodel.Diagnosticutility' ha lanciato un'eccezione. ---> System.Configuration.ConfigurationerRorsexception: non è riuscito a trovare tipo per classe System.Diagnostics.xmlwriterTraceListener, System, versione = 4.0.0.0, Culture = Neutral, PublicKeyToken = B77A5C561934E089. at system.diagnostics.traceutils.getRuntimeObject (String ClassName, digita BaseType, String InitializeData)

Ed ecco la nuova sezione del codice inserito nel file .config di SVCConfigEditor:

<sharedListeners>
<add initializeData="C:\Program Files\ASIWindowsService\ASIWindowsService_tracelog.svclog"
type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
name="ServiceModelTraceListener" traceOutputOptions="Timestamp">
<filter type="" />
</add>
<add initializeData="C:\Program Files\ASIWindowsService\ASIWindowsService_messages.svclog"
type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
name="ServiceModelMessageLoggingListener" traceOutputOptions="Timestamp">
<filter type="" />
</add>
</sharedListeners>
È stato utile?

Soluzione

Questa domanda è stata data risposta nei commenti, ma c'è un Gotcha che ho visto in Visual Studio 2010 che potrebbe portare a una situazione simile.

Anche se il framework target è impostato sulla versione 3.x per un progetto WCF, utilizzando SVCConfigEditor 2010 inserirà automaticamente il sistema "System.Diagnostics.xmlwriterTracelistener, System, versione = 4.0.0.0 ..." sebbene dovrebbe inserire un sistema ". Diagnostics.xmlwriterTraceListener, System, versione = 2.0.0.0 ... "Questo ti morderà durante la distribuzione del Web.Config alterato in un servizio ospitato IIS in cui si trova l'apppool non configurato per utilizzare il framework .NET 4.0. La correzione è semplicemente modificare il web.config su "versione = 2.0.0.0".

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top