Raúl
Moderator
 Moderator
| Posts: 313 |  | Karma: 5
|
Re:Initial State Partner - 2008/05/05 12:54
Hola,
No hace falta que exista el fichero de configuración XML. Lo que pasa es que si no existe (o no está en el camino especificado) tienes que controlarlo, porque si no te puede llevar a resultados inesperados. Por ejemplo, inicialmente haces esto para definir el partner de estado inicial:
| Code: | // Cera Physical Layer state
private const string InitialStateURI = ServicePaths.MountPoint + @"/Apps/UC3M/Config/CeraPhysical.Config.xml";
[InitialStatePartner(Optional = true, ServiceUri = InitialStateURI)]
private CeraPhysicalState _state = null;
|
Como dices que el fichero de configuración es opcional, el servicio arrancará aunque no encuentre el fichero, pero no debes olvidarte de inicializar el estado de alguna forma, porque si no se quedará como null.
Por lo tanto, en el método start() puedes hacer lo siguiente (preguntar si el estado el null (no se ha leido el fichero de configuración) o si se ha creado el objeto estado (sí se ha leído correctamente el fichero de configuración)):
| Code: | // Initialize State.
if (_state == null)
{
_state = CreateDefaultState(); // CERA Physical default state.
}
|
De esta forma, si se leyó el fichero se rellena sola la variable _state. Pero si no se leyó el fichero de estado, entonces llamo a mi método CreateDefaultState() que lo que hace es crear un estado por defecto y rellenarlo en la variable _state.
Otro problema que suele suceder con el estado es que cuando estás programando un servicio cambias o añades variables nuevas en el estado y entonces el fichero de estado que tenías creado de antes ya no es válido. Así que vigila que cada vez que cambies algo de la definición de tu estado lo añadas también en el fichero XML que tengas guardado (o lo borras y creas uno nuevo desde tu servicio).
Para crear el fichero de estado desde tu servicio sólo tienes que hacer lo siguiente:
| Code: | // Save the default state to disk
SaveState(_state);
|
Raúl Arrabales Moreno. conscious-robots.com |