2013-10-09 2 views
2

Я использую код ниже, чтобы позвонить в службу OData (это рабочая служба от Odata.org) из C#, и я не получаю никакого результата.
Ошибка в response.GetResponseStream().Позвоните в службу OData с C#

Здесь ошибка:

Length = 'stream.Length' threw an exception of type 'System.NotSupportedException' 

Я хочу, чтобы позвонить в службу и анализировать данные из него, что самый простой способ сделать это?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Web; 
using System.Net; 
using System.IO; 
using System.Xml; 

namespace ConsoleApplication1 
    { 
    public class Class1 
     { 

     static void Main(string[] args) 
      { 
      Class1.CreateObject(); 
      } 
     private const string URL = "http://services.odata.org/OData/OData.svc/Products?$format=atom"; 


     private static void CreateObject() 
      { 
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL); 
      request.Method = "GET"; 

      request.ContentType = "application/xml"; 
      request.Accept = "application/xml"; 
      using (WebResponse response = request.GetResponse()) 
       { 
       using (Stream stream = response.GetResponseStream()) 
        { 

        XmlTextReader reader = new XmlTextReader(stream); 

        } 
       } 

      } 
     } 
    } 

ответ

4

я побежал ваш код на моей машине, и он выполнялся отлично, я смог перемещать все элементы XML, полученные XmlTextReader.

var request = (HttpWebRequest)WebRequest.Create(URL); 
    request.Method = "GET"; 

    request.ContentType = "application/xml"; 
    request.Accept = "application/xml"; 
    using (var response = request.GetResponse()) 
    { 
     using (var stream = response.GetResponseStream()) 
     { 
      var reader = new XmlTextReader(stream); 
      while (reader.Read()) 
      { 
       Console.WriteLine(reader.Value); 
      } 
     } 
    } 

Но, как предложил @qujck, взгляните на HttpClient. Это намного проще в использовании.

+0

Можете ли вы добавить код, который поможет вам увидеть данные ответа –

+0

Я обновил свой ответ с помощью кода. –

3

Если вы используете .NET 4.5, то посмотрите на HttpClient (MSDN)

HttpClient client = new HttpClient(); 
client.DefaultRequestHeaders.Accept.Add(
    new MediaTypeWithQualityHeaderValue("application/json")); 
HttpResponseMessage response = await client.GetAsync(endpoint); 
Stream stream = await response 
    .Content.ReadAsStreamAsync().ConfigureAwait(false); 
response.EnsureSuccessStatusCode(); 

См here и here для полных примеров

+0

Когда я пытаюсь использовать ваш код в консольном приложении, у меня возникла ошибка для HTTP: «HttpClient» не найден (вам не хватает директивы using или сборки. Я использую .net 4.55, что мне делать с избегайте этих ошибок? –

+1

Установили ли вы клиентские библиотеки веб-API? Следуйте этому руководству: http://www.asp.net/web-api/overview/web-api-clients/calling-a-web-api-from- a-net-client – qujck

+1

Typo: _client вместо клиента для соответствия объявленному имени. –

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