2010-07-07 4 views
0

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

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

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

Во-первых, есть 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"]); 
+0

Избавиться от злого блока 'catch'. – SLaks

ответ

0

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

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

+0

Исключением я получаю: запрос на разрешение типа «System.Net.WebPermission, System, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089» не выполнен. – Brandi

+1

Как я и предполагал, ваш веб-хост не позволяет серверу делать HTTP-запросы. Жалуйтесь в службу поддержки или переключитесь на лучший хост. – SLaks

+0

Я изменил веб-конфигурацию , и это сделало трюк. Спасибо, что указал мне в правильном направлении. :) – Brandi