2010-05-04 3 views
2

У меня есть следующий класс как часть приложения asp.net.Поведение статического объекта Asp.net

public sealed class SomeClass  
{ 
    private static string appId = Guid.NewGuid().ToString(); 

    public static ReadSomethingFromDb(){} 

    public static WriteSomethingToDb(){} 
} 

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

Предполагая, что у меня есть два экземпляра, запущенных на mysite.a и mysite.b, указанный класс генерирует два разных указателя.

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

Спасибо заранее

ответ

3

Это будет получить новый Guid за AppDomain; вы будете иметь новые AppDomain сек, когда:

  • приложение бассейн перерабатывает
  • разные машины
  • перезагрузки сервера
  • редактировать файл, такие как web.config
  • IIS просто чувствует себя как нерест другой

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

Почему не только что-то вроде пути к сайту или имени IIS в качестве идентификатора?

+0

Я понимаю это. Я на 99% уверен, что нет утилиты для пула приложений, перезагрузки сервера, веб-конфигурации. Это оставляет разные машины (что я не понимаю, что вы имеете в виду) и IIS (что я ничего не могу с этим поделать). Что касается вашего предложения, класс, который я опубликовал, является частью проекта, который включен как DLL в приложение asp.net, поэтому я думаю, что у меня нет доступа ни к одному из двух. если я ошибаюсь ... –

+0

Под «разными машинами» я имею в виду - веб-ферму; несколько серверов, претендующих на роль одного. Но я ожидаю, что виновником здесь является IIS, требующий нового «AppDomain» - вы не можете многое сделать по этому поводу. –

2

Новый AppDomain создан при различных обстоятельствах. Например, при изменении web.config. В то время не было запланировано никаких новых запросов для исходного AppDomain; и все новые запросы отправляются на новый.

Во время перехода оба AppDomains будут работать.

1

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

string applicationId = Environment.MachineName+"" 
    +System.Web.HttpContext.Current.Request.ApplicationPath; 

это накрыла меня, как есть шанс мульти установки машинно плюс экземпляров приложения, которое зависит от пути.

Смежные вопросы