2010-04-29 5 views
1

클라이언트가 웹 요청의 전체 페이로드를 얻으려면 먼저 응답 크기를 측정하여 보내야합니다. 응답이 너무 클 경우 클라이언트는 사용자에게 작업을 중단 할 수있는 옵션을 제공하는 메시지를 표시합니다.WCF 응답의 크기를 결정하는 기본 제공 방법이 있습니까?

서버에 응답을 미리로드하고 크기를 결정한 다음 클라이언트에게 전달할 수있는 맞춤 코드를 작성할 수 있지만 다른 방법이있는 경우에는 그렇지 않습니다.

WCF가이를 수행하는 데 까다로운 방법이 있는지 아는 사람 있습니까? 또는이 작업을 수행 할 수있는 무료 타사 도구가 있습니까?

감사합니다.

답변

0

정말 WCF 나 .NET 프레임 워크에서 "까다로운"것이 없다고 생각합니다. 당신은 고객에게 무엇을 돌려주고 있습니까? 클래스의 인스턴스?

당신이 할 수있는 일은 쿼리를 실행하거나 응답을 가져온 다음 메모리 스트림으로 직렬화하여 얼마나 큰지를 확인하는 것입니다. 이것은 완전히 정확한 크기는 아닐 것입니다. SOAP 메시지에는 SOAP 봉투 및 헤더와 같은 약간의 오버 헤드가 있습니다.하지만 몇 백 바이트를 반환 할 것인지 여부에 대한 야심작을 줄 수 있습니다. 몇 메가 바이트.

문제 :이 작업은 서버에서/쿼리를 쿼리 한 다음 실제로 "측정"하는 데 다소 시간이 걸릴 수 있습니다. 또한 Int 또는 Long 등을 반환하는 "MeasureResult"에 두 건의 호출을하고 두 번째 호출 인 "GetResult"를 호출하여 실제로 결과를 얻습니다. 따라서 메시지를 두 번 조립하려는 노력이 필요합니다 ....

나는 당신에게 좋은 대답이 아니지만, 어쩌면 단지 다른 방법으로 클라이언트를 중단시킬 수 있어야합니다. 전화 걸기가 너무 오래 걸리면 전화하십시오. 또는 응답의 규모에 대한 지표를보다 신속하게 파악할 수있는 방법을 찾으십시오.

+0

모두 좋은 제안입니다. 데이터 다운로드가 n 초 이상 걸리면 문제가 완전히 회피되고 UI 측 사용자에게 메시지가 표시됩니다. 가장 강력한 솔루션은 아니지만 프로세스 속도를 더 늦추고 결국 근사치를 제공하는 일련의 서버 측 코드를 작성하는 것보다 훨씬 쉽습니다. – jaminto

관련 문제