2014-03-15 6 views
1

Я только что опубликовал свое приложение на своем веб-сайте Windows Azure. На моем сайте я получаю пользователям IP-адрес с помощью следующего кода:Сайт работает нормально локально, но сбой в Windows Azure

ip = HttpContext.Current.Request.UserHostAddress; 

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

Кроме того, когда я удаленной отладки веб-сайта я не могу видеть «Current» свойство HttpContext - все это говорит,:

Cannot evaluate expression because the code of the current method is optimized. 

Кроме того, я могу видеть, что я могу получить IP-адрес в контроллере с легкостью - проблема только в том, что я вызываю HttpContext.Current.Request.UserHostAddress вне контроллера.

Любой, кто знает, в чем проблема может быть?

ответ

3

HttpContext недоступен при использовании интегрированного режима IIS до тех пор, пока Application_Start не закончит работу.

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

public class IPService 
{ 
    private static string ip = string.Emtpy; 

    public static string GetIP() 
    { 
     if (string.IsNullOrEmpty(this.ip)) 
     { 
      this.ip = HttpContext.Current.Request.UserHostAddress; 
     } 

     return this.ip; 
    } 
} 

Тогда всякий раз, когда вам нужно получить доступ к IP, вы можете позвонить:

var ip = IPService.GetIP(); 

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