Я использую WCF и пытаюсь возобновить загрузку со следующим кодом в приложении сервера:
class DataUploader : IDataUploader
{
public void Upload(UploadMessage msg)
{
int speed = msg.AvgSpeed * 1024; // convert to KB
Stream stream= msg.DataStream;
string name = msg.VirtualPath;
int seekPoint; // this is get reading the partial uploaded file
using (FileStream fs = new FileStream(@"C:\savedfile.dat, FileMode.Append))
{
int bufferSize = 4 * 1024; // 4KB buffer
byte[] buffer = new byte[bufferSize];
int bytes;
while ((bytes = stream.Read(buffer, startPoint, bufferSize)) > 0)
{
fs.Write(buffer, 0, bytes);
fs.Flush();
}
stream.Close();
fs.Close();
}
}
}
Я пытаюсь начать чтение потока из указанной точки (startPoint), поскольку первые байты уже загружены. Таким образом, я мог добавить только оставшиеся байты в частично загруженный файл. Таким образом, я получаю сообщение об ошибке с размером буфера и не могу использовать поиск, потому что метод не поддерживает исключение, поэтому я думаю, что этот подход неправильный. Помогите !!
Мой сервисный контракт:
[ServiceContract]
interface IDataUploader
{
[OperationContract]
void Upload(UploadMessage msg);
}
Мой контракт сообщения:
[MessageContract]
public class UploadMessage
{
[MessageHeader(MustUnderstand = true)]
public string VirtualPath { get; set; }
[MessageHeader(MustUnderstand = true)]
public int AvgSpeed { get; set; }
[MessageBodyMember(Order = 1)]
public Stream DataStream { get; set; }
}