Pregunta

Hace más de un año había estado trabajando en un servicio de WCF, que escribí usando VS 2008. Se ejecuta bajo un servicio de Windows, que también escribí. Ha estado corriendo allí desde entonces. Y desafortunadamente, han surgido otros proyectos/prioridades, evitando que continúe con ese proyecto, hasta ahora.

Ahora estoy tratando de volver a eso. Sin embargo, esto pasa, estoy tratando de averiguar si puedo usar VS 2010 y .NET 4, en lugar de .NET 3.5. He mencionado el símbolo del sistema, para ejecutar svcutil, para obtener la información WSDL, que pondré en el archivo de configuración para la nueva aplicación WPF que estoy intentando comenzar a escribir. Lo único es que sigo recibiendo un error, diciendo que no puedo comunicarme con el servidor, etc.

Entonces, copié el archivo .exe.config desde el servidor a mi máquina, donde podría editarlo con SVCConfigeditor. He hecho esos cambios, volví a ponerlo en el servidor y recibí un error al intentar ejecutar SVCUTIL, pero peor que no vi los archivos .svClog que esperaba ver. Así que entré en la aplicación de servicios del servidor. Encontré el servicio de Windows que escribí hace un año; Vi que estaba funcionando, se detuvo y lo comenzó de nuevo.

Ahora tengo un problema diferente. Mi servicio de Windows comienza, pero luego se detiene de inmediato. Entiendo este mensaje que dice que el servicio había comenzado y luego se detuvo, y diciendo que a veces eso sucede con diferentes tipos de servicios, como registros de rendimiento y servicios de alertas. He verificado el registro de eventos en el servidor, y luego lo único relacionado con este servicio de Windows es que ingresó al estado de inicio y luego ingresé al estado detenido.

Ah, después de intentar comenzar 4 veces, finalmente me dio un error en el registro de eventos. (¿Por qué no hizo eso en primer lugar? ¿Y quién dice que tratar de hacer lo mismo una y otra vez, y esperar resultados diferentes es un signo de locura, cuando claramente las primeras 3 veces no registró nada en el registro de eventos, pero en el 4 intento lo hizo).

Aquí está el error:

Tipo de evento: Error Fuente del evento Fuente: Servicio1 Categoría del evento: Ninguno ID de evento: 0 Fecha: 5/4/2011 Hora: 10:14:46 AM Usuario: N/A Computadora: Helios Descripción: No se puede iniciar el servicio. System.TypeInitializationException: el tipo inicializador para 'System.ServiceModel.DiaGnóstico de UNA LIMITA UNA EXCEPCIÓN. ---> System.Configuration.ConfigurationRorsexception: No se pudo encontrar el tipo de clase System.diagnostics.xmlwritertracelistener, System, Version = 4.0.0.0, Culture = Neutral, PublicKeyToken = B77A5C561934E089. en system.diagntics.traceutil.getRunTimeObject (String classname, escribe basetype, string inicializedata)

y aquí está la nueva sección del código colocada en el archivo .config por 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>
¿Fue útil?

Solución

Esta pregunta fue respondida en los comentarios, pero hay un Gotcha que he visto en Visual Studio 2010 que podría resultar en una situación similar.

Incluso si el marco de destino se establece en la versión 3.x para un proyecto WCF, utilizando el SVCConfigeditor 2010 insertará automáticamente "System.diagnostics.xmlwriterTracelistener, System, Version = 4.0.0.0 ..." aunque debería insertar "el sistema". Diagnostics.xmlwritertracelistener, sistema, versión = 2.0.0.0 ... "Esto lo morderá al implementar la web.config alterada a un servicio alojado IIS donde está el Apppool no configurado para usar el marco .NET 4.0. La corrección es simplemente editar la web.config de regreso a "versión = 2.0.0.0".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top