Tenemos una aplicación de programación ejecutándose que llama a un servicio WCF para ejecutar trabajos nocturnos. Una gran cantidad de estos incluyen información sobre la fecha comercial actual. Por motivos comerciales, el servidor de programación está configurado en GMT, pero nuestro servicio se está ejecutando en servidores configurados a la hora de Nueva York.Manejo de WCF Deserialización de objetos DateTime
Esto plantea un problema; las fechas se pasan a nuestro servicio .NET con información explícita sobre la zona horaria. Entonces, cuando el servicio le dice a la aplicación que se ejecute con una fecha de "2008-11-03 00:00:00 +0: 00", el servicio lo interpreta como "2008-11-02 19:00:00 -5: 00 "y las cosas se ejecutan con la fecha incorrecta.
El comportamiento del planificador es de terceros y está codificado, por lo que no podemos decirle al planificador que omita el desplazamiento de la zona horaria. No queremos convertir siempre la fecha a GMT porque existe una posibilidad real de que nuestras oficinas asiáticas llamen al mismo servicio y volveremos al mismo problema.
¿Hay alguna manera de marcar el DataContract, o incluso controlarlo a un nivel lo suficientemente bajo como para asegurarse de que DateTime Kind no se especifique? ¿O hay alguna manera con DateTime para determinar cuál era la información original utilizada para crearla y convertirla al valor original en un paso posterior al procesamiento?
Si ayuda, en este momento nuestro contrato es bastante simple. Los métodos toman un parámetro que es una clase derivada de la clase a continuación.
[DataContract]
public class BaseTimeSensitiveParameters
{
[DataMember] public DateTime? BusinessDate;
}
Si desea que el servidor de programación se configure en GMT, configure la zona horaria del sistema operativo en GMT. –