C#で画像を転送する最良の方法は何ですか?
- ビットマップ オブジェクト
- バイト配列
- 画像オブジェクト?
唯一の「最善」の方法はありません。あるとすれば、その方法はおそらく 1 つしかないでしょう。それは、あなたの状況、ニーズ、優先順位によって大きく異なります。
とは言っても、楽しくて簡単な Base64 エンコーディングをあらゆる機会に使用しています。:)
WCF では、メソッドから Stream オブジェクトを返すことができます。
public Stream GetImage(string name)
{ ... }
純粋な SOAP ベースのプロトコルを使用している場合は、byte[] などのプリミティブに固執する必要があります。これはパフォーマンスの低いオプションですが、実際にはより良い方法はありません。これをすべてのクライアントで機能させるには、ファイルを複数の部分に分割する必要がある場合があります。一部の SOAP クライアントは大きな応答を許可しないため、以前は応答を 30,000 個に分割していました。
画像を転送する最善の方法は、上記のいずれの方法も使用せず、画像に対して直接 HTTP 要求を実行し、これらすべてを回避することです。これが現在使用しているもので、エンコーディングもクライアント処理もなしで、ディスクに直接ストリーミングされます。これを適用できるかどうかを判断するには、特定のユース ケースを調べる必要があります。
私は最近、WCF サービスを使用してこれを実装し、実装が非常に簡単だったため、ファイルを転送する方法として Byte[] を使用することにしました。
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;
}
上記の例は、ファイル名を WCF サービスに直接渡していないため簡略化されていますが、一般的な考え方は理解できるはずです =)
画像への URL のみを返し、クライアントが返された URL に対して生の HTTP 呼び出しを行い、画像をフェッチすることもできます。
ありがとう
VM