2010-07-24 10 views

Odpowiedz

6

Nie ma jednego "najlepszego" sposobu. Gdyby tak było, to prawdopodobnie byłby tylko jeden sposób. To naprawdę zależy od twojej sytuacji, potrzeb i priorytetów.

Powiedziawszy, używam kodowania Base64 przy każdej nadarzającej się okazji, ponieważ jest fajnie i proste! :)

+2

ta odpowiedź mnie lol. – tster

1

I niedawno wdrożone to przy użyciu usługi WCF i postanowiła wykorzystać Byte [] jako metodę transportowania pliku, jak to było dość proste do wykonania:

public byte[] DownloadFile(string fileName) 
{ 
    var stream = System.IO.File.OpenRead(fileName); 

    byte[] fileContent = new byte[stream.Length]; 
    stream.Read(fileContent, 0, fileContent.Length); 

    return fileContent; 
} 

Powyższy przykład jest uproszczone, bo nie mijał nazwę pliku bezpośrednio do usług WCF, ale jestem pewien, że można uzyskać ogólne pojęcie =)

2

W WCF można powrócić obiektu Stream z metody:

public Stream GetImage(string name) 
{ ... } 

Jeśli masz czysty protokół oparty na SOAP, będziesz musiał trzymać się prymitywów takich jak bajt []. Jest to słaba opcja, ale tak naprawdę nie ma lepszej metody. Być może trzeba będzie posegmentować plik w wielu częściach, aby działało dla wszystkich klientów. Niektórzy klienci SOAP nie zezwalają na duże odpowiedzi, więc użyliśmy fragmentów odpowiedzi na 30 tys.

Najlepszym sposobem na przeniesienie obrazu jest niewykorzystanie powyższego podejścia, a raczej wykonanie żądania HTTP bezpośrednio na obrazie i uniknięcie tego wszystkiego. Właśnie tego używamy teraz, bez kodowania, bez przetwarzania klienta, bezpośrednio na dysk. Musisz sprawdzić konkretny przypadek użycia, aby ustalić, czy można go zastosować.

0

Można również zwrócić tylko adres URL obrazu, a następnie pozwolić klientowi wykonać surowe wywołanie HTTP do zwróconego adresu URL w celu pobrania obrazu.

Dziękujemy
VM

+0

nie, jeśli chodzi o przeniesienie obrazu na inny serwer/usługę – BerggreenDK

Powiązane problemy