문제

나는 정말 이상한되는 문제를 알아낼 수 없습니다와 비교체에서 IIS7.우리는 우리를 배포하는 과정에서 우리의 오래된 IIS6 기반 ASP.NET 응용 프로그램에서 IIS7,그러나 우리는 이 평등을 비교하는 문제할 수 있습니다.

나를 시작으로 말하는 내가 같은 어셈블리고 실행되는 코드 모두에서 IIS6IIS7,그러나 비교 개체의가 다른 동일한 코드 모두에서 IIS6IIS7.여기에는 예입니다 어떤 나 같은 개체:

class Country : EntityBase {
    public int CountryID { get; set; }
    public string Name { get; set; }

    public override bool Equals(object obj) {
        if (obj == null || !(obj is Country))
            return false;

        Country c = (Country)obj;
        return CountryID == c.CountryID;
    }

    public override int GetHashCode() {
        return CountryID.GetHashCode();
    }
}

나는 다음과 같은 코드에 페이지를 모두에서 IIS6IIS7:

<% foreach(var country in proposalCountries) { %>
<%= country.Country.CountryID %>
<%= country.Country.CountryID.GetHashCode() %>
<%= country.Country.GetHashCode() %>

<%= proposalCountryServices.Count(c => c.Country == country.Country) %>
<%= proposalCountryServices.Count(c => (c.Country != null && country.Country != null) && c.Country.Equals(country.Country)) %>)
<%= proposalCountryServices.Count(c => Object.Equals(c.Country, country.Country)) %>
<% } %>

여기에는 나의 결과는:

IIS6:

100 <-- CountryID
100 <-- CountryID Hash Code
100 <-- Country Hash Code

1 <-- Something Found
1 <-- Something Found
1 <-- Something Found

IIS7:

100 <-- CountryID
100 <-- CountryID Hash Code
100 <-- Country Hash Code

0 <-- Nothing Found
1 <-- Something Found
1 <-- Something Found

차이가 있습니다.NET3.5SP1Windows2003 년에 대 Windows2008?나는 진짜로의 손실에서 무엇이 문제가 될 수 있습니다.는 사람이 비슷한 문제입니까?

Update1:

답변 존의 질문입니다.두 가지 컬렉션은 사용하여로드 NHibernate.그러나 나는 느낌을 내가 해야 되풀이 모두 IIS6IIS7 을 사용하는 정확히 동일한 건축 의 응용 프로그램,그렇지 않으면 NHibernate 또는 DynamicProxy2 은 어떻게 변하는 것을 로드 기반의 윈도우에서 2003 또는 Windows2007,나는 수가 없었다는 것을 찾아에 대한 구글,I don't know what to make of it.

이 시스템은 또한이 넓은 문제의할 때마다 난 비교하는 두 가지의 내 기업체입니다.그래서 그것을 할 수 있는 뭔가 있을 수 있습으로 DynamicProxy2wrapper,하지만 두 물체가 나라 개체고 재정의가 모든 것을 창조해야에서 동일한 작업 IIS6IIS7.

Update2:

이 나타납니다 DynamicProxy2 또는 NHibernate 문제입니다.려 했기 때문에 다음과 같은 코드:

<%
    var c1 = new ICost.Business.Entities.Country {
        CountryID = 100
    };
    var c2 = new ICost.Business.Entities.Country {
        CountryID = 100
    };
%>
<%= c1.CountryID == c2.CountryID %>
<%= c1.GetHashCode() == c2.GetHashCode() %>
<%= c1.Equals(c2) %>
<%= Object.Equals(c1, c2) %>
<%= c1 == c2 %>

그리고 모두를위한 IIS6IIS7 결과, true, true, true, true, false.나의 답변을 아래를 위해 무엇을 했는지,문제를 해결합니다.

Update3:

이것은 또한 수도 함께 할 수있는 뭔가가 있었다:처럼 보이는 당신이 잊을 등록 http 모듈과 윈저 성과 IIS7

도움이 되었습니까?

해결책 4

이는 해결책이 나를 위해 일했:

public static bool operator ==(BaseEntity a, BaseEntity b)
{
    return Object.Equals(a, b);
}

public static bool operator !=(BaseEntity a, BaseEntity b)
{
    return !Object.Equals(a, b);
}

분명히 NHibernate 또는 DynamicProxy 하고 있던 어떤 종류의 마법 윈도우에서 2003 년을 얻을 수"=="작업으로의 연산자는 오버로드됩니다.

다른 팁

당신은하지 않은 무엇인지 설명 proposalCountriesproposalCountryServices 니다.그것처럼 내게 보이는 당신의 같음 방법은 잘 작동하지만,IIS7 그들이 포함 뚜렷한 개체-당신은 두 개체와 동일한 ID(그래서 같치)하지만 그들은 뚜렷한 개체이므==없이 일치합니다.

주십시오시는 방법으로 두 개의 컬렉션 로드하는 가능성을 그것의 원인입니다.

차이 내가 보는 경우에 당신이 쓴

c.Country == country.Country

그리고 경우에 그것은 두 개의

c.Country.Equals(country.Country))

그래서 나는 추측에 후자의 경우는 성공하기 때문에 그는 비교 CountryIDs 두 개체의 첫 번째 경우에는 그러나 그는 비교하는 개체를 스스로가.

왜 이 작품에서 IE6 내가 알지 못하...죄송

당신이 사용하지 않는 평등한 참조합니다(아래 참조).

체입니다.같이 통화하는 재정의 Equals 방법에 당신의 유형입니다.

나는 의심이 있을 뽑아 다른 인스턴스의 엔티티에서 다른 DataContexts,그리고 그것에 추가 목록으로,따라서 사용하는 재정의 동등도 작동합니다.

업데이트:

죄송을 확실하지 않는 경우에 당신은 당신을 사용하여 LINQ2SQL.

당신은 아마 문제를 해결을 재정의하여==/!= 사업자,그러나 몇 가지 사항을 고려와 함께 하는 전세계적인 네트워크입니다.

Update2:

무슨 뜻인지 이해하기,을 모두 찾을 경우 당하다고 판단되는 동등한(정확히는 곳이 문제가 발생).중단점을 설정합니다.이제,이동 및 obj1 및 입&obj2 및 입,당신은 그들이 지점을 다른 개체 주소입니다.이렇게 모두에서 IIS6and7.

나는 확실하지 않은 왜 그것을 다르게 행동에 lls6 에와 IIS7 지만,의심의 미묘한 차이 페이지에서 수명 주기 원인이 될 수 있다는 왜 그들은 그 referentially 같습니다.

Update3:

당신은에서 실행되는 고전적인 모드에서 IIS7?하지 않을 경우,하려고 그렇게 함.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top