0

我正在编写一个控制客户端下载的应用程序,我需要知道下载何时成功,但我需要在服务器端进行,但我找不到这样的东西。

这是我的服务器代码:

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

我需要知道客户端下载何时成功,而无需再次调用该服务。

4

2 回答 2

0

他们如何下载文件?使用您的 WCF 服务?如果是这样,您必须将内容流式传输给它们,因此只需确定流读取已结束,然后执行您需要执行的任何操作。

于 2011-01-31T22:39:05.150 回答
0

您无法知道何时下载成功。您只能知道服务何时发送了所有数据。

知道客户端是否接收到所有数据的唯一方法是让客户端告诉服务它已经接收到所有数据。

于 2011-02-02T16:52:12.367 回答