Как получить часовой пояс перед обратной передачей - PullRequest
0 голосов
/ 08 июля 2010

Я создаю страницу, которая принимает данные постов с любого количества страниц, которые я не могу изменить, получить к ним доступ или каким-либо образом контролировать.

Мне нужно, так или иначе, получить часовой поясПользователь.Я знаю, что в идеале страница публикации могла бы сделать это, но я не могу получить доступ к этим страницам.

Я прочитал другие ответы на этом сайте и нашел почти два, но не совсем там решения.

Во-первых, есть JavaScript.Я могу заставить функцию javascript возвращать (или изменять метку) правильное значение, но проблема в том, что мне нужна эта информация перед обратной передачей.Я пытался написать название часового пояса на другой странице и прочитать эту страницу, но я понятия не имею, как начать это делать?Любой другой обходной путь для использования javascript приветствуется, или любой способ принудительно вызвать его перед вызовом Page_Load?

    function getTimeZone()
    {
       var d = new Date()
       var gmtHours = -d.getTimezoneOffset()/60;
       var label = document.getElementById("<%=TZ.ClientID%>");
       label.textContent = "GMT " + gmtHours;
    }

Второе решение - прочитать его с другой страницы, и я использую это:

http://ipinfodb.com/ip_query.php?ip=192.36.167.120&timezone=true

(Между прочим, совершенно случайный ip, кстати)

Итак, вот моя функция, чтобы получить информацию с этого сайта:

        public string GetTimezone(string ip)
    {
        string address = string.Format("http://ipinfodb.com/ip_query.php?ip={0}&timezone=true", ip);
        string timezone = "";

        try
        {
            XmlTextReader reader = new XmlTextReader(address);
            HttpWebRequest wrq = (HttpWebRequest)WebRequest.Create(address);
            wrq.Proxy.Credentials = CredentialCache.DefaultCredentials;
            reader = new XmlTextReader(wrq.GetResponse().GetResponseStream());

            string lastRead = "";
            while (reader.Read())
            {
                if (reader.NodeType == XmlNodeType.Element)
                {
                    lastRead = reader.Name;
                }
                if (reader.NodeType == XmlNodeType.Text)
                {
                    if (string.Compare(lastRead, "TimezoneName", true) == 0)
                    {
                        timezone = reader.Value;
                        break;
                    }
                }
            }
        }
        catch
        {
            timezone = "";
        }

        return timezone;
    }

В принципе, это работает в отладкережим, но когда он живой, возвращается только пустая строка.Я сбит с толку?Есть ли лучший способ прочитать данные со страницы?Я использую Request.ServerVariables ["REMOTE_ADDR"], чтобы получить ip, и это кажется правильным, поскольку он вставляет правильный ip в базу данных, которую я использую.

Вот вызов:

GetTimezone(Request.ServerVariables["REMOTE_ADDR"]);

1 Ответ

0 голосов
/ 08 июля 2010

Вы получаете исключение, возможно, из-за проблемы доверия / брандмауэра на рабочем сервере.

Избавьтесь от злого блока catch, чтобы вы могли узнать, что такое исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...