Pregunta

He creado un webservice y cuando quiero utilizar sus métodos me instancia en el procedimiento, llame al método, y yo por fin me deshago de ella, sin embargo creo que también podría estar bien para crear una instancia del servicio web en el "private void Main_Load(object sender, EventArgs e)" del evento.

La cosa es que si lo hago la primera forma en la que tengo que crear una instancia del servicio web cada vez que tengo uno de sus métodos, pero en la otra forma que tengo para mantener un webservice conectado todo el tiempo cuando yo lo uso en un formulario, por ejemplo.

Me gustaría saber cual de estas prácticas están mejor, o si hay una forma mucho mejor para hacerlo

Estrategia 1

private void btnRead_Click(object sender, EventArgs e)
{
    try
    {
        //Show clock
        this.picResult.Image = new Bitmap(pathWait);

        Application.DoEvents();

        //Connect to webservice
        svc = new ForPocketPC.ServiceForPocketPC();
        svc.Credentials = new System.Net.NetworkCredential(Settings.UserName, Settings.Password);
        svc.AllowAutoRedirect = false;
        svc.UserAgent = Settings.UserAgent;
        svc.PreAuthenticate = true;
        svc.Url = Settings.Url;
        svc.Timeout = System.Threading.Timeout.Infinite;

        svc.CallMethod();
         ...
    }
    catch (Exception ex)
    {
        ShowError(ex);
    }
    finally
    {
        if (svc != null)
            svc.Dispose();
    }
}

Estrategia 2

private myWebservice svc;

private void Main_Load(object sender, EventArgs e)
{
    //Connect to webservice
    svc = new ForPocketPC.ServiceForPocketPC();
    svc.Credentials = new System.Net.NetworkCredential(Settings.UserName, Settings.Password);
    svc.AllowAutoRedirect = false;
    svc.UserAgent = Settings.UserAgent;
    svc.PreAuthenticate = true;
    svc.Url = Settings.Url;
    svc.Timeout = System.Threading.Timeout.Infinite;
}

private void btnRead_Click(object sender, EventArgs e)
{
    try
    {
        //Show clock
        this.picResult.Image = new Bitmap(pathWait);

        Application.DoEvents();
        svc.CallMethod();
         ...
    }
    catch (Exception ex)
    {
        ShowError(ex);
    }
}

private void Main_Closing(object sender, CancelEventArgs e)
{
    svc.Dispose();
}
¿Fue útil?

Solución

Depende de la frecuencia con la que van a llamar al servicio web.Si vas a estar llamando a casi constantemente, probablemente sería mejor utilizar el método #2.Sin embargo, si no se va a conseguir que se llama muy a menudo, es mejor usar el método #1, y sólo a instancias de él cuando lo necesite.

Otros consejos

Ahora he hecho una solución para un dispositivo móvil, y resulta que para ser utilizado en tiempos irregulares, podría ser utilizado en 10 minutos, 1 hora, 4 horas de su muy variable, parece que el mejor abordaje es la primera estrategia.

El año pasado fuimos en un proyecto en el que hemos utilizado webservices, el hecho es que hemos instanciado nuestros webservices en la Sub New() procedimiento y funciona muy bien, sin embargo, a veces algunos usuarios afirmaron a nosotros que a ellos les despertó de sus sillas y cuando se volvió y trató de continuar en la aplicación a la que recibió un tiempo de espera de mensaje de error y se tuvo que volver a iniciar sesión de nuevo.

Nos thougth que tal vez eso estaba bien, porque tal vez los usuarios salió por un muy largo tiempo fuera de sus asientos, pero una vez en una presentación de la aplicación con la que los CEOs sucedió exactamente el mismo escenario y personalmente no me gusta ese comportamiento y por eso la pregunta.

Gracias por la respuesta.

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