2011-11-23 4 views
-1

이 situvation을 처리 할 수있는 방법 어떤 몸은우리가 WCF

  1. 내가 WCF 서비스가 오전에 관한 나를 도울 수의 작업을 잘
    WCF (100 개) 기록을 데이터베이스 다음에서
    WCF 서비스를 가져 오는 기록을 가진 데이터베이스 conectivity 데이터베이스를 가지고 클라이언트가 레코드를 요청할 때 레코드가 클라이언트 시스템에 제출되어야합니다.
  2. 클라이언트가 레코드를 요청할 때 10-20 레코드가 제대로 작동하지만 클라이언트와 WCF 서비스 간의 거대한 트래픽으로 인해 레코드 100을 가져 오는 경우 서비스를 제공하지 않는 서비스입니다.

어떻게하면 WCF에서 이러한 상황을 처리 할 수 ​​있습니까?

+2

오류가 발생하는 경우 ??? –

+0

클라이언트는 100 개의 레코드를 처리 할 수 ​​없지만 10-20 개의 레코드는 정상적으로 작동합니다. –

+0

모든 코드를 입력하십시오. – VMAtm

답변

2

메시지 크기가 너무 큰 경우 예외가 발생하면 Setting Max Message and buffer size for WCF webhttp에 나와있는 옵션 중 일부를 볼 수 있습니다.

서비스가 반환하는 최대 값은 100입니다. 성장하고 성장한다면 메시지 크기를 변경하지 않는 것이 좋습니다. 이 같은 것을보고하는 방법을했다, 그래서 만약 대신에 당신은 아마 페이징 메커니즘의 일종을 고려해야합니다

IEnumerable<Record> GetRecords() 

는합니다

Response GetRecords(index) 

그리고 응답은 다음과 같이 보일 것이다 :

[DataContract] 
public class Response 
{ 
    [DataMember] 
    IEnumerable<Record> Records { get; set; } 

    [DataMember} 
    bool IsLast { get; set; } 

    [DataMember] 
    int PageIndex { get; set } 
} 

그러면 클라이언트에서 다음과 같이 호출합니다.

Response resp; 
int pageIndex = 0; 
do 
{ 
    resp = service.GetRecords(pageIndex); 
    // use resp.Records here - could just build a bigger list with them all in 
    // and use it after the loop or if your client can handle chunks, just use it 
    pageIndex = resp.PageIndex + 1; 
} while(!resp.IsLast); 

가장 정교한 페이징은 아니지만 잘하면 시작할 수있는 곳을 제공합니다.