2012-04-28 2 views
0

문제점 : Silverlight 응용 프로그램에서 작업 중이며 많은 데이터를 DomainContext, 즉 웹 서비스에서로드하고 있습니다. BusyIndicator가 현재 쿼리를 표시하면서 몇 가지 다른 쿼리 실행을 시작하지만 대부분의 데이터로 쿼리에 도달하면 멈 춥니 다. 몇 분 후에 서버가 다음 쿼리에 응답하지 않는다고 표시됩니다.DomainContext 데이터를로드하는 동안 Silverlight가 멈 춥니 다.

디버그/시도 된 솔루션 : 데이터를 적게로드하면 시스템이 작동합니다. 시간이 초과되었다고 가정하고 그 이유는 다음 쿼리가 존재하지 않는다는 것입니다. 즉, 웹 서비스에 연결할 수도 없습니다. 나는 한동안 둘러 보았고 사람들은 시간 초과 및 최대 결과 크기를 늘리라고 제안했습니다. 이것들은 다른 문제를 해결했기 때문에 그들이 작동한다는 것을 알았지 만 (즉, 적용되고 있음),이 문제는 해결되지 않습니다.

데이터를로드하는 것과 관련이없는 다른 바보 같은 문제가 아닌지 확인하기 위해 문제를 격리하려고했습니다. 웹 서비스의 쿼리 함수 (반환 결과, 아래)에서 반환 할 때 문제가 발생합니다. 즉, 웹 서비스 자체에는 문제가 없어야합니다. 그래서 두 디버그 프린트가 모두 실행되고, 두 번째 것은 2726 개의 엘리먼트가됩니다.

웹 서비스 코드 :

public IQueryable<Person> GetPeopleWithSubscription() 
{ 
    Debug.WriteLine("Before"); 
    IQueryable<Person> result = test(); 
    Debug.WriteLine("After " + result.Count().ToString()); 
    return result; 
} 

private IQueryable<Person> test() 
{ 
    return this.ObjectContext.People.Where(p => 
     p.Subscriptions.Count > 0 || 
     p.Subscriptions1.Count > 0 || 
     p.ID < 0); 
} 

국가 번호 : 오래된 클라이언트 (즉 문제가 발생하기 전에)이 여전히 작동하기 때문에 또한

... 
_context.Load(_context.GetSubscriptionTypesQuery(), DataLoaded, false); 
... 

이 문제는 클라이언트 측에서 나타납니다 새 서버로 그러나, 나는 문제가 발생했기 때문에 저장소에서 diffs를 겪어 왔고, 차이를 만들어야하는 어떤 것도 찾을 수 없다.

누구든지이 문제를 해결할 수 있습니까? 더 자세한 정보가 필요하면 알려주십시오.

답변

0

최근에 WCF 프레임 워크의 작동 방식과 그 철학에 대해 읽었습니다. Microsoft는 특히 GUI를 차단하는 경우 제한 시간을 가지고 노는 것을 제안하지 않습니다. 그들은 전화가 60 초 이상 걸리면 재 설계가 필요할 수도 있다고 주장한다. 페이징을 사용 해본 적이 있습니까?이 ui 패턴은 모든 종류의 데이터에 적용되지 않을 수도 있지만 많은 양의 데이터를로드하는 경우 사용자가 동시에 모든 것을 볼 필요가 없다고 생각합니다.

필자에게 몇 주 전에 비슷한 문제가 발생했으며 멀티 스레드 설계를 사용하여 다중 삽입을 수행하도록 웹 서비스 구현을 변경했습니다. 이를 통해 서비스 처리 시간을 60 초 미만으로 줄일 수있었습니다.

희망이 당신을 도울 것입니다,

건배,

관련 문제