Я нашел очень хороший код в вашем сервисе:
try
{
host.Open();
}
catch {}
Это один из худших антипаттернов!Немедленно замените этот код на правильную обработку ошибок и ведение журнала.
Я не тестировал ваш сервис, а просто просмотрев конфигурацию и ваш код, я предположил, что он никогда не будет работать, потому что он не соответствует требованиям дляпотоковая передача по HTTP.Когда вы хотите передавать по HTTP, метод должен возвращать только один элемент тела, который имеет тип Stream.Вместо этого ваш метод возвращает данные контракта.Используйте эту версию:
[ServiceContract]
public interface IFileTransferService
{
[OperationContract]
DownloadFileResponse DownloadFile(DownloadFileRequest request);
}
[MessageContract]
public class DownloadFileRequest
{
[MessageBodyMember]
public string FileName;
}
[MessageContract]
public class DownloadFileResponse
{
[MessageHeader]
public string FileName;
[MessageHeader]
public long Length;
[MessageBodyMember]
public System.IO.Stream FileByteStream;
}
Не закрывайте поток на сервисе.Ответственность за закрытие потока лежит на клиенте.