2011-01-31 7 views
0

클라이언트 다운로드를 제어하는 ​​응용 프로그램을 작성 중입니다. 다운로드가 성공했을 때 알 필요가 있지만 서버 측에서해야하지만 이렇게하는 것이 없습니다.WCF 다운로드 파일 제어

이 내 서버 코드 : 스트림을 반환 GetCover

public GetCoverResponse GetCover(GetCoverRequest request) 
    { 
     return new GetCoverResponse() 
     { 
      Cover = downloadsManagementService.GetCover(request.IssueId) 
     }; 
    } 

[MessageContract] 
public class GetCoverResponse: IDisposable 
{ 
    [MessageBodyMember(Order=1)] 
    public Stream Cover; 

    public void Dispose() 
    { 
     if (Cover != null) 
     { 
      Cover.Close(); 
      Cover = null; 
     } 
    } 
} 

. 나는이 구성을 사용하고 있습니다 :

<basicHttpBinding> 
    <binding name="StreamedBindingConfiguration" messageEncoding="Mtom" maxBufferSize="65536" 
       transferMode="Streamed"> 
    </binding> 
</basicHttpBinding> 

클라이언트 코드는 다음과 같습니다 나는 클라이언트 다운로드 서비스를 다시 호출하지 않고 성공하면 알 필요가

static void Main(string[] args) 
{ 
     var client = new DownloadsService.DownloadsServiceClient(); 
     var data = client.GetCover(1); 
     FileStream f = new FileStream(@"D:\copiaDDDDDDD.txt", FileMode.OpenOrCreate); 
     Copy(data, f); 
     f.Close(); 
     data.Close(); 
     client.Close(); 
} 

public static void Copy(Stream source, Stream target) 
{ 
     byte[] buffer = new byte[65536]; 
     int bytes; 
     try 
     { 
      while ((bytes = source.Read(buffer, 0, buffer.Length)) > 0) 
      { 
       target.Write(buffer, 0, bytes); 
      } 
     } 
     finally 
     { 
      target.Flush(); 
     } 
    } 

.

+0

파일을 다운로드하는 방법을 보여주는 코드를 게시 할 수 있습니까? – Tridus

답변

0

다운로드가 완료된시기를 알 수 없습니다. 서비스가 모든 데이터를 보낸시기 만 알 수 있습니다.

클라이언트가 모든 데이터를 수신했는지 확인하는 유일한 방법은 클라이언트가 모든 데이터를 수신했다는 것을 서비스에 알리는 것입니다.

+0

고마워요.하지만 어떻게 할 수 있습니까? – Javier

+0

고객이 "끝났습니다"라는 서비스에 전화해야한다는 뜻입니다. –

0

파일을 어떻게 다운로드합니까? WCF 서비스를 사용 하시겠습니까? 그렇다면 내용을 스트리밍하여 스트림 읽기가 끝난 다음에 무엇을해야할지 결정하십시오.