HTTPWebRequest.GetResponse () выбрасывает исключение сбоя соединения - PullRequest
0 голосов
/ 06 января 2011

Я пытаюсь создать простое приложение, которое выполняет HTTP-запрос / ответ по нажатию кнопки.Вот весь код, который я получил из справочника:

using System.Collections.Generic;   
using System.ComponentModel;  
using System.Data;  
using System.Drawing;  
using System.Text;  
using System.Windows.Forms;  
using System.IO;  
using System.Net;  

namespace emulator2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public void button1_Click(object sender, EventArgs e)
        {
            Uri l_Uri = new Uri("http://www.testing.com");
            HttpWebRequest l_WebReq = (HttpWebRequest)WebRequest.Create(l_Uri);
            HttpWebResponse l_WebResponse =
            (HttpWebResponse)l_WebReq.GetResponse();
            Stream l_responseStream = l_WebResponse.GetResponseStream();
            StreamReader l_SReader = new StreamReader(l_responseStream);
            string resultstring = l_SReader.ReadToEnd();
            Console.WriteLine(resultstring);
        }
    }
}

Меня удивляет то, что когда я перемещаю весь кусок кода в приложение Windows, он работает нормально.Но когда я использую его в приложении устройства, оно просто выдает мне ошибку.Вот подробности ошибки:

System.Net.WebException был обработан Сообщение = "Не удалось установить соединение с сетью."StackTrace: в System.Net.HttpWebRequest.finishGetResponse () в System.Net.HttpWebRequest.GetResponse () в emulator2.Form1.button1_Click () в System.Windows.Forms.Control.OnClick () в System.Windows.Forms.Button.OnClick () в System.Windows.Forms.ButtonBase.WnProc () в System.Windows.Forms.Control._InternalWnProc () в Microsoft.AGL.Forms.EVL.EnterMainLoop () в System.Windows.Forms.Application.Run() at emulator2.Program.Main ()

Ошибка указывает на эту строку:

HttpWebResponse l_WebResponse = (HttpWebResponse)l_WebReq.GetResponse();

Кто-нибудь имеет какие-либо идеи о том, как решить эту проблему?Мне нужно решить эту проблему очень быстро .. поэтому любая помощь очень ценится!Спасибо!

Ответы [ 2 ]

1 голос
/ 06 января 2011

Если вы работаете в эмуляторе, вам необходимо «закрепить» эмулятор, а затем создать партнерство с ActiveSync (Win XP) или Windows Mobile Device Center (Vista или 7).

Это позволит эмулятору совместно использовать сетевое соединение с ПК. Вам также необходимо это сделать, даже если вы хотите подключиться с эмулятора к ПК.

Как упоминает Джон, в WP7 вам не нужно устанавливать соединение таким образом, эмулятор WP7 автоматически разделяет сетевое подключение хост-компьютера.

Используйте IE Mobile (на эмуляторе), чтобы убедиться, что устройство может подключиться к сайту.

1009 ** * Редактировать 1010 ** * 1011 Чтобы закрепить эмулятор, в VS2008 выберите «Диспетчер эмулятора устройства» в меню «Сервис». Выберите работающий эмулятор, щелкните правой кнопкой мыши и выберите «Колыбель».

Центр мобильных устройств должен запуститься автоматически и спросить, хотите ли вы создать партнерство, как если бы вы подключили реальное устройство.

1 голос
/ 06 января 2011

Я предполагаю, что эмулятор не имеет надлежащего сетевого подключения. Это может быть болезненно (и, как мне показалось, неудачей), работа в сети на старых эмуляторах Windows Mobile. (Это просто в Windows Phone 7.)

Загрузите Internet Explorer и посмотрите, может ли 1004 * установить соединение с тем же URL-адресом ...

Кроме того, вы не утилизируете ни один из своих ресурсов (и если этот код действительно находится в справочнике в точности так, как вы его написали, это значительный черный знак по сравнению с книгой). Например, вы должны удалить веб-ответ:

using (HttpWebResponse response = ...)
{
}

Точно так же я лично распоряжался бы потоком ответов и устройством чтения потоков, просто по общему принципу. Я подозреваю , что при удалении ответа поток будет слишком - но имеет смысл избавиться от всех потоков и т. Д., Если только вы не знаете, что нужно оставить их нераспределенными.

...