WCF скачать файл контроля - PullRequest
       14

WCF скачать файл контроля

0 голосов
/ 01 февраля 2011

Я пишу приложение, которое контролирует загрузку клиента, мне нужно знать, когда загрузка прошла успешно, но мне нужно сделать это на стороне сервера, но я не нахожу что-то подобное.

Это мой код сервера:

    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;
        }
    }
}

GetCover возвращает поток.Я использую эту конфигурацию:

<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();
        }
    }

Мне нужно знать, когда загрузка клиента прошла успешно, без повторного вызова службы.

Ответы [ 2 ]

0 голосов
/ 02 февраля 2011

Вы не можете знать, когда загрузка прошла успешно.Вы можете знать только, когда служба отправила все данные.

Единственный способ узнать, получил ли клиент все данные, - это сообщить клиенту, что он получил все данные..

0 голосов
/ 01 февраля 2011

Как они скачивают файлы?Используете свой сервис WCF?Если это так, вы должны передавать им содержимое, поэтому просто определите, когда чтение потока закончилось, и сделайте все, что вам нужно.

...