He estado luchando durante unos días con un problema con nuestras aplicaciones de WPF y me pregunto si alguien se ha encontrado con esto antes y puede ayudarlo? El problema parece reducirse al cliente que genera un serializador "sobre la marcha" para manejar los tipos en esa llamada al método web. Cuando se llama a ese método por primera vez (el servicio web en sí mismo ya se está ejecutando), puede tomar, por ejemplo, 8 segundos, las llamadas siguientes pueden tomar, por ejemplo, 20ms. La CPU en el proceso WPF del cliente es v. Alta durante este retraso.Uso de WCF de WPF muy lento en el primer uso
Al usar XmlSerializer, hay una forma de pregenerar estos ensamblajes de serializador, usando svcutil. Cuando (como estamos) usando el WCF DataContractSerializer normal, esta opción no parece estar presente.
Lo que me gustaría es poder pregenerar este ensamblaje para todos los tipos en todos mis contratos de datos (mucho) o, como alternativa, reemplazar este proceso por uno personalizado que pueda codificar y pasar los datos en binario (poseemos ambos extremos de este servicio web/cliente y ambos son .NET 4). Ya he usado la compresión BinaryForamtter y GZip y, si bien esto acelera la transferencia de datos, siempre se restaura a XML para ser deserializado por el framework, de ahí que este problema persista.
¿Alguna idea?
Gracias Julien, ya tengo useDefaultWebProxy falso. He buscado usar protobuf-net, pero estoy teniendo problemas para entender si me requerirá volver a decorar todos mis tipos de datos con un nuevo atributo. Espero que no. En el sitio web dice que v2 se puede "usar sin atributos si se desea", pero todos los ejemplos usan atributos. ¿Esto mejorará la velocidad de inicio de la primera llamada, incluso en IIS (que es realmente obligatorio), es decir, es el serializador protobuf-net pregenerado en tiempo de compilación? –
@SimonEvans, siempre y cuando tenga la propiedad 'Order' establecida en cada' DataMember', debería estar bien. Aunque no lo usé yo mismo (fui con protobuf desde el principio). –
Julien, ¿quieres decir que tendría que agregar [ProtoMember (n)] a cada propiedad pública? Gracias por su ayuda –