2009-12-08 1 views
3

Существует локальная служба, из которой мне нужно использовать сгенерированный поток XML-документа. Хотя конечная точка не является службой REST как таковой. Я хотел быть уверен, что метод, описанный ниже, является наиболее эффективным способом получения ответа, возвращаемого в XDocument.Эффективный способ получения HttpWebResponse и помещения его в 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())); 

ответ

2

Если вы хотите синхронный запрос, то, на мой взгляд, да.

Но было бы неплохо обработать WebException. В WebException.Response.GetResponseStream() у вас должна быть страница HTTP/HTML error или soapfault.

запрос асинхронной
// начинает асинхронное извлечение потока ответа ...
результата переменных = request.BeginGetResponse (...)
// установки метода тайма-аут обратного вызова, BeginGetResponse тайма-аут ... это не распространяется
ThreadPool.RegisterWaitForSingleObject (result.AsyncWaitHandle, ...)

+0

Хорошая идея об обработке 'WebException'. Тем не менее, какова будет ваша предлагаемая модификация для асинхронного запроса? – ahsteele

Смежные вопросы