Ok, spytam inaczej - czy używając np. msmqTransport (zamiast httpTransport) moge w jakis sposob zapewnic buforowany transfer plików binarnych?
Przykład bez msmq:
<bindings>
<customBinding>
<binding name="streamingBinding">
<mtomMessageEncoding />
<httpTransport transferMode="Streamed" maxReceivedMessageSize="10067108864"/>
</binding>
</customBinding>
</bindings>
W takim wypadku jeżeli klient chce np. pobrac plik z serwera, wystarczy zwrócić mu strumień, czyli cos takiego:
public RemoteFileInfo DownloadFile(DownloadRequest request)
{
// pobierz info pliku
//string filePath = System.IO.Path.Combine("Upload", request.FileName);
string filePath = request.FileName;
System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath);
Console.WriteLine("Wysyłam " + request.FileName + " do klienta");
Console.WriteLine("Rozmiar: " + fileInfo.Length);
// czy istnieje
if (!fileInfo.Exists) throw new System.IO.FileNotFoundException("Plik nie istnieje", request.FileName);
// otwórz strumień
System.IO.FileStream stream = new System.IO.FileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read);
// zwróć wynik
RemoteFileInfo result = new RemoteFileInfo();
result.FileName = request.FileName;
result.Length = fileInfo.Length;
result.FileByteStream = stream;
return result;
}
Wszystko bardzo fajnie, jezeli transmisja nie przerwie sie w trakcie, na przykład z powodu utraty połączenia. Interesuje mnie mechanizm, który automatycznie wznowi transmisję gdy połączenie znów będzie zestawione. Czy jest to możliwe?
Oczywiscie w przypadku, gdy chwilowo padnie łączność podczas transferu mogę po jej powrocie dalej kontynuować transfer, ale takie rozwiązanie nie bardzo mnie satysfakcjonuje, bo jest dość kłopotliwe w implenetacji - w tym przypadku w RemoteFileInfo musiałbym jeszcze podawać od jakiego miejsca w pliku chcę rozpocząć przerwany transfer. Wolałbym jednak jakis wbudowany mechanizm, o ile taki istnieje.
[dodano]
Widzę, że msmq tez zapewnia transfer strumieniowy, ale jeżeli wiadomość będzie traktowano jako całość to i tak niewiele mi daje :/