прокси asp не загружает внешний xml

#c# #jquery #asp.net #xml #rss

#c# #jquery #asp.net #xml #RSS-канал

Вопрос:

я пытаюсь загрузить удаленный rss-канал с помощью jquery и прокси-сервера (aspx). Я прочитал много вопросов по этому вопросу, но мой немного отличается.
У меня есть XML-файл, который содержит подписки пользователя. Для каждой записи я хочу загрузить несколько каналов, скажем, первые 3 канала.
Я могу правильно получить список подписок, но я не могу получить записи канала. Прокси продолжает выдавать это исключение:

 Riga 22:             HttpWebRequest request = (HttpWebRequest) WebRequest.Create(proxyURL);
Riga 23:             request.Method = "GET";
Riga 24:             HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Riga 25: 
Riga 26:             if (response.StatusCode.ToString().ToLower() == "ok")

[SocketException (0x274c): Impossibile stabilire la connessione. Risposta non corretta della parte connessa dopo l'intervallo di tempo oppure mancata risposta dall'host collegato 213.92.16.191:80]


System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)  269
   System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socketamp; socket, IPAddressamp; address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exceptionamp; exception)  649

[WebException: Impossibile effettuare la connessione al server remoto.]
   System.Net.HttpWebRequest.GetResponse()  1126
   Proxy.Page_Load(Object sender, EventArgs e) in c:Usersandreadocumentsvisual_studio_2010websitesleafhouseProxy.aspx.cs:24
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)  25
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)  42
   System.Web.UI.Control.OnLoad(EventArgs e)  132
   System.Web.UI.Control.LoadRecursive()  66
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)  2428
  

Это моя страница proxy.aspx:

 using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net;
using System.IO;

public partial class Proxy : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string proxyURL = string.Empty;
        try
        {
            proxyURL = HttpUtility.UrlDecode(Request.QueryString["u"].ToString());

        if (proxyURL != string.Empty)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(proxyURL);
            request.Method = "GET";
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            if (response.StatusCode.ToString().ToLower() == "ok")
            {
                string contentType = response.ContentType;
                Stream content = response.GetResponseStream();
                StreamReader contentReader = new StreamReader(content);
                Response.ContentType = contentType;
                Response.Write(contentReader.ReadToEnd());
            }
        }
    }
    catch(Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}
  

}

И это jquery, который я использую:

 $.ajax({
    type: "GET",
    url: "proxy.aspx?u="   encodeURI("http://"   serverAddress   ":82")   "/RSSReaderSubscriptions.xml",
    dataType: "xml",
    success: function (data) {
        $(data).find('url').each(function (index, element) {
            if (index < 3) {
                $.ajax({
                    type: "GET",
                    url: "proxy.aspx?u="   encodeURI($(this).text()),
                    dataType: "xml",
                    success: function (data) {
                        parseRSS(data);
                    },
                    error: function () {
                        console.log("error");
                });
            }
        });
    },
    error: function () {
        console.log("error");
});
  

Как я могу заставить прокси загружать RSS-каналы?
Любая помощь приветствуется! Спасибо!

Ответ №1:

Это больше похоже на проблему с сетью / подключением, чем на ошибку в вашем коде.

Можете ли вы подключиться «вручную» к URL-адресу канала? Возможно, какой-то прокси блокирует доступ к ним…

Некоторые замечания:

  • Для выполнения такого рода заданий лучше использовать HttpHandlers вместо aspx-страниц, чтобы избежать полного (и отнимающего время / ресурсы) Жизненный цикл страницы. Об этом есть очень интересная статья на Encosia здесь.

  • Лучше использовать data свойство объекта jquery ajax options для передачи данных, а не создавать строку запроса, как вы делаете в настоящее время.

Надеюсь, это немного поможет, d.

Комментарии:

1. Спасибо за совет HttpHandler. Я переключился на него, поскольку, похоже, именно то, что я искал! Для решения проблемы прочитайте мой ответ.

Ответ №2:

Я решил проблему. Я думаю, что если вы устанавливаете IIS ПОСЛЕ установки .NET 4, Asp не регистрируется в IIS, поэтому вы всегда получаете error 500 (возможно, это верно и для предыдущих версий IIS, но я не могу это проверить). Решение состоит в том, чтобы открыть командную строку (я сделал как администратор) и перейти в папку:

 cd %windir%/Microsoft.NET/Framework/v4.xxxxx/
aspnet_regiis.exe -i
  

Теперь все должно быть готово, наслаждайтесь!

Комментарии:

1. Вот немного больше информации об этом инструменте на MSDN . Приятно знать, спасибо также!