Estoy escribiendo una aplicación de Silverlight para Windows Phone 7, que tiene una clase que necesita para hacer múltiples solicitudes de WebClient.DownloadStringAsync()webclient casos ser reutilizados en Silverlight
¿Me conviene crear una nueva instancia de cliente Web para cada solicitud, o es más eficiente inicializar una sola instancia en un campo y usar eso para cada solicitud (asegurándose de tener solo una solicitud activa en un momento dado)?
public class MainViewModel : INotifyPropertyChanged
{
private readonly WebClient _wc;
public MainViewModel()
{
_wc = new WebClient
{
Credentials = new NetworkCredential("yyyyyyy", @"xxxxxx")
};
}
readonly Uri _baseUrl = new Uri(@"https://some.web.url");
public void GetServices()
{
_wc.DownloadStringCompleted += GetServicesCompleted;
var uri = new Uri(_baseUrl, "/path");
_wc.DownloadStringAsync(uri);
}
private void GetServicesCompleted(object sender, DownloadStringCompletedEventArgs e)
{
_wc.DownloadStringCompleted -= GetServicesCompleted;
string result = e.Result;
// other logic...
GetServiceResources();
}
private void GetServiceResources()
{
_wc.DownloadStringCompleted += GetServicesResourcesDownloaded;
var url = new Uri(_baseUrl, "/path2");
_wc.DownloadStringAsync(url);
}
// etc
}
Sé de lo que estás hablando sobre el estado de mal humor en el que los proxies de WCF se pueden meter. Sería interesante saber si también es similar para el WebClient de Silverlight. –
@BFree ha eliminado su respuesta, pero solo para repetir que no hay un método Dispose() en la clase WebClient de Silverlight, por lo que el uso de bloques no es relevante aquí. –
Como preferencia personal, sin embargo, agregaría em si es fácil de hacerlo o documentar la primera vez que ocurre; es un buen hábito siempre desechar cualquier cosa 'IDisposable'; y no es dañino hacerlo incluso para WebClient. –