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はStreamを返します。私はこの構成を使用しています:

<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

ダウンロードが成功したかどうかはわかりません。サービスがすべてのデータを送信したときのみ知ることができます。

クライアントがすべてのデータを受信したかどうかを知る唯一の方法は、クライアントがサービスにすべてのデータを受信したことを通知することです。

于 2011-02-02T16:52:12.367 に答える
0

彼らはどのようにファイルをダウンロードしていますか? WCF サービスを使用していますか? その場合、コンテンツをそれらにストリーミングしている必要があるため、ストリームの読み取りが終了したことを確認してから、必要なことを実行してください。

于 2011-01-31T22:39:05.150 に答える