나는 식별에 어려움이있는 매우 미묘한 버그가 있습니다.IIS에서 미묘한 버그 식별에 도움이 필요하십니까? 세션? 다른 곳에 ..?
배경 : 동일한 웹 서버에서 동일한 응용 프로그램을 실행하는 2 개의 사이트가 있습니다.
- 사이트 A - 액세스 www.SiteA.com
- 사이트 B - 액세스 www.SiteB.com 요청이 처음 들어올 때, siteId는 호스트 기반으로 식별
세션에 저장된 다음과 같이
protected void Application_BeginRequest(object sender, EventArgs e)
{
string host = Request.Url.Host;
int siteId = new SiteManager().GetSiteByUrl(host).SiteId;
if (SessionUser.Instance().SiteId != siteId)
{
SessionUser.Instance().SiteId = siteId;
}
}
retreive하고 제시 어떤 스타일을 결정하는 어떤 데이터를 결정하는데 이후의 사용이 ID :
// this happens during an initialization phase
_siteConfiguration = _siteManager.GetSiteById(SessionUser.Instance().SiteId);
// then later:
private void SetPageTheme()
{
string theme = null;
switch (_siteConfiguration.SiteId)
{
case ConfigurationHelper.SITE.A:
theme = "SiteATheme";
break;
case ConfigurationHelper.SITE.B:
theme = "SiteBTheme";
break;
}
Page.Theme = theme;
}
0 문제 : 당신이 밀리 초 내에, 즉 정확히 거의 동시에 두 사이트를로드하는 경우
내가 직면하고있어 문제가, 때로는 사이트 A가 사이트 B의 주제와 그 반대의 경우도 마찬가지로로드됩니다 . 이것은 매우 자주 발생하지는 않지만 클라이언트의주의를 끌었습니다. 이제는 문제입니다. SiteA 로딩과 SiteB 로딩의 차이점에서 몇 밀리 초 이내에 어딘가에서 어떤 일이 발생하고 있습니다. 그것이 무엇인지 확인하십시오.
질문 :이
사람이 어떤 아이디어가 있습니까 잘못 여기에 무엇을 갈 수 있을까? 뭔가 어딘가에서 혼란스러워지고 있습니다. IIS가 요청을 혼합하고 있습니까? SiteId를 반환 할 예정인 사이트를 혼합하는 세션입니까?
더 많은 정보가 필요한 경우이를 제공합니다.
업데이트 : 참고로
,이 SessionUser
의 정의입니다 (기본적으로는, 세션에서 SiteId 값을 얻기 위해 객체의 정적 인스턴스를 생성) :
public class SessionUser
{
private static SessionUser _instance;
public int SiteId { get; set; }
/// <summary>
///
/// </summary>
/// <returns></returns>
public static SessionUser Instance()
{
if (null == _instance)
{
_instance = new SessionUser();
if (null != HttpContext.Current.Session)
{
if (null == HttpContext.Current.Session["User"])
{
if (HttpContext.Current.Request.QueryString["sid"] != null)
{
int nSiteId = int.Parse(HttpContext.Current.Request.QueryString["sid"]);
_instance.SiteId = nSiteId;
HttpContext.Current.Session["User"] = _instance;
}
}
else
{
_instance = (SessionUser) HttpContext.Current.Session["User"];
}
}
}
return _instance;
}
}
안녕 leppie, 나는 SessionUser를 정의하는 코드로 질문을 업데이 트했습니다. – DaveDev
@DaveDev : 그 거대한 엉망을 광산으로 대체하십시오. :) 그리고 그'정적'필드를 제거하십시오! – leppie
필자는이 코드를 자신의 코드로 대체 할 수있게되어 기쁘게 생각합니다. 제 동료는 'yoda 프로그래머'입니다. 하지만 질문이 있어요 - 귀하의 코드는'class SessionUser'가'public class SessionUser'가되어야한다고 지정하고 있습니까? – DaveDev