2010-03-29 5 views
0

Silverlight에서 웹 사이트의 HTML을 다운로드하고 구문 분석하는 응용 프로그램을 개발하기 시작했습니다. Silverlight 4를 사용하면 높은 권한을 요청하기 만하면 쉽게 달성 할 수 있습니다. 그러나 Silverlight 3을 사용하면 웹 사이트의 HTML을 가져 오는 유일한 방법은 WebService 호출을 사용하는 것입니다. 내가 내 Silverlight 응용 프로그램에서뿐만 아니라 비동기입니다 전화를 만들하자마자, 나를 HTML을 검색 할 수있는 방법이 없다는 것을 깨달았다, 그러나WebService 내에서 WebClient 호출하기

public class Service1 
{ 
    [OperationContract] 
    public void GetHtml() 
    { 
     Uri targetUri = new Uri("http://www.google.com", UriKind.RelativeOrAbsolute); 

     WebClient webClient = new WebClient(); 
     webClient.DownloadStringCompleted += this.WebClient_DownloadStringCompleted; 
     webClient.DownloadStringAsync(targetUri); 
    } 

    private void WebClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
    { 

    } 
} 

: 내 초기 아이디어는 다음을 수행 할 수 있었다 웹 사이트의 나는 다음과 같이 변경 이유입니다 :

public class Service1 
{ 
    [OperationContract] 
    public string GetHtml() 
    { 
     Uri targetUri = new Uri("http://www.google.com", UriKind.RelativeOrAbsolute); 

     WebClient webClient = new WebClient(); 
     return webClient.DownloadString(targetUri); 
    } 
} 

나는이 스레드를 동결하기 때문에 마지막 방법은 미세하지 믿습니다. 그래서, 내 질문, 첫 번째 방법은 a.k.a. 비동기 호출에서 비동기 호출을 달성하기 위해 방법입니다 :). 어떤 도움이라도 대단히 감사하겠습니다.

최고 감사합니다, 키릴

+0

나는이 문제를 이해하고 있는지 잘 모르겠다. 두 번째 버전의 코드는 서버의 스레드 만 고정시킵니다. SL -> 서비스 호출이 진행되는 동안 클라이언트 응용 프로그램은 "unfrozen"상태를 유지합니다. –

+0

그게 내가 피하려고하는 것입니다 - 서버를 동결. DownloadStringAsync를 사용하여 WebClient 호출을 만들면 서버가 멈추지 않지만 DownloadStringCompleted 이벤트 처리기에서 반환 된 데이터를 가져 오는 방법은 무엇입니까? –

+0

아, 죄송합니다. 나는 당신의 질문을 오해했습니다. –

답변

1

당신은 양면 인쇄 서비스를 implementig하여 목표를 달성 할 수있다. msdn site에는 유용한 정보가, Mike Taulty는 멋진 podcast entry을 제공합니다. 일반적으로 운영 계약을 두 부분으로 나누어 수정해야합니다. 첫 번째 부분은 서버에서 WebClient 다운로드를 시작합니다. 그런 다음 서버에서 html을 다운로드 한 후 서버는 필요한 html 콘텐츠로 구성된 페이로드로 클라이언트 측에서 구현되는 계약을 콜백합니다.

+1

+1 좋은 답변입니다. 하지만 :이 솔루션은 절대적으로 필요하다면 확실히 갈 수있는 방법이지만, 나는 왜 당신이 그것을 필요로하는지 궁금해하고 있습니다. 괜찮은 웹 서버라면 완벽하게 여러 요청을 처리 할 수 ​​있습니다. 일부 HTML을 다운로드하기 때문에 "고정"되지 않습니다. –

+1

@Henrik. 나는 너와 100 % 동의한다. 이것은 단지 '꼭해야만한다면'입니다. +1에 감사드립니다. – Przemek

+0

여러분은이 시나리오에서 DownloadString 메서드를 사용하는 것이 완벽하게 정상이라고 말합니다. –

관련 문제