2009-12-08 10 views
3

Il existe un service local dont j'ai besoin pour consommer un flux de document XML généré. Bien que le point final ne soit pas un service REST en soi. Je voulais être sûr que la méthode que j'ai décrite ci-dessous est la façon la plus efficace d'obtenir la réponse retournée dans un XDocument.Méthode efficace pour récupérer HttpWebResponse et le placer dans XDocument

Uri requestUri = null; 
Uri.TryCreate(String.Format(SearchAddress, filter), 
    UriKind.Absolute, out requestUri); 

NetworkCredential nc = 
    new NetworkCredential("Login", "Password"); 
CredentialCache cCache = new CredentialCache(); 
cCache.Add(requestUri, "Basic", nc); 

HttpWebRequest request = 
    (HttpWebRequest)HttpWebRequest.Create(requestUri); 
request.Credentials = cCache; 
request.PreAuthenticate = true; 
request.Method = WebRequestMethods.Http.Get; 

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
XDocument xDoc = 
    XDocument.Load(new StreamReader(response.GetResponseStream())); 

Répondre

2

Si vous voulez une demande synchrone alors à mon avis oui c'est.

Mais ce serait une bonne idée de gérer WebException. Dans WebException.Response.GetResponseStream(), vous devez avoir une page d'erreur HTTP/HTML ou une soapfault.

demande de Asynch
// commence la récupération asynchrone de flux de réponse ...
var result = request.BeginGetResponse (...)
// fixer une méthode de rappel de délai d'attente, BeginGetResponse Indifférent délai d'attente ...
ThreadPool.RegisterWaitForSingleObject (result.AsyncWaitHandle, ...)

+0

Bonne idée de la gestion de 'WebException'. Cela dit, quelle serait votre modification suggérée pour une requête asynchrone? – ahsteele