Я смотрел на эту тему: Как обрабатывать загрузки больших файлов через WCF?
Мне нужно, чтобы у моего провайдера была размещена веб-служба, куда я должен загружать и скачивать файлы. Мы говорим видео от 1 МБ до 100 МБ, следовательно, потоковый подход.
Я не могу заставить его работать, я объявил интерфейс:
[ServiceContract]
public interface IFileTransferService
{
[OperationContract]
void UploadFile(Stream stream);
}
и все в порядке, я реализую это так:
public string FileName = "test";
public void UploadFile(Stream stream)
{
try
{
FileStream outStream = File.Open(FileName, FileMode.Create, FileAccess.Write);
const int bufferLength = 4096;
byte[] buffer = new byte[bufferLength];
int count = 0;
while((count = stream.Read(buffer, 0, bufferLength)) > 0)
{
//progress
outStream.Write(buffer, 0, count);
}
outStream.Close();
stream.Close();
//saved
}
catch(Exception ex)
{
throw new Exception("error: "+ex.Message);
}
}
Все еще нет проблем, он опубликован на моем веб-сервере в сети Интернет. Пока все хорошо.
Теперь я делаю ссылку на него и передаю ему FileStream, но аргумент теперь является байтом [] - почему это так и как мне получить его правильным способом для потоковой передачи?
Редактировать
Мой переплет выглядит так:
<bindings>
<basicHttpBinding>
<binding name="StreamingFileTransferServicesBinding"
transferMode="StreamedRequest"
maxBufferSize="65536"
maxReceivedMessageSize="204003200" />
</basicHttpBinding>
</bindings>
Я могу использовать его без проблем и без ошибок - кроме того, что мой входной параметр изменился с потока на байт []
Редактировать 2
Решено! Я был немного быстр, когда сделал ссылку на моего клиента. Случайно я сделал «веб-ссылку» вместо «сервисной ссылки». Это решило проблему с байтами [] / stream