クライアントのダウンロードを制御するアプリケーションを作成しています。ダウンロードが成功するタイミングを知る必要がありますが、サーバー側で実行する必要がありますが、このようなものは見つかりません。
これは私のサーバーコードです:
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();
}
}
サービスを再度呼び出さなくても、クライアントのダウンロードが成功したことを知る必要があります。