У меня есть тестовый сервис WCF с потоковым webHttpBinding, который позволяет загружать файлы через веб-браузер.Проблема в том, что браузер не показывает размер файла и прогресс загрузки.Это сервисный контракт:
[ServiceContract]
public interface IDataTransferService
{
[WebGet(UriTemplate = "download?file={fileName}")]
Stream GetDownloadStream(string fileName);
}
Это сервисная реализация:
public sealed class DataTransferService : IDataTransferService
{
public Stream GetDownloadStream(string fileName)
{
var context = WebOperationContext.Current;
var stream = File.OpenRead(fileName);
WebOperationContext.Current.OutgoingResponse.Headers["Content-Disposition"] = $"attachment; filename={Path.GetFileName(fileName)}";
WebOperationContext.Current.OutgoingResponse.ContentType = "application/octet-stream";
WebOperationContext.Current.OutgoingResponse.Headers["Content-Length"] = stream.Length.ToString();
return stream;
}
}
А это сервисная конфигурация:
<system.serviceModel>
<services>
<service name="WcfStreamingTest.Server.DataTransferService">
<endpoint contract="WcfStreamingTest.IDataTransferService"
address="http://localhost:8000/streamingtest/api/transfer"
binding="webHttpBinding"
bindingConfiguration="streamedWeb"
behaviorConfiguration="web"/>
</service>
</services>
<bindings>
<webHttpBinding>
<binding name="streamedWeb" transferMode="Streamed" sendTimeout="00:15:00" />
</webHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="web">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
Имя файла отображается правильно, но информация о файлеразмер отсутствует.