0

次のコードを使用して、Silverlight Canvas から形成された大きなサイズの byte[] があります。

var img = new WriteableBitmap(cnvControlHolder, null);
        var outStream = new MemoryStream();
        EncodeJpeg(img, outStream);

これをWCFサービスに送信して、このバイト配列から画像を形成し、サーバー側で画像として保存して、SSRSで使用できるようにします。私の問題は、バイト[]が大きいため、WCFサービスから見つからない古典的なメソッドを取得することです。

WCF ストリーミングが 1 つのオプションになるといういくつかのリンクを読みましたが、ネット上でサンプルを見つけることができませんでした。私のサービス方法は次のようなものです:

public bool Upload(Stream image)
    {
        FileStream fileStream = null;
        BinaryWriter writer = null;
        var filePath = HttpContext.Current.Server.MapPath(".") + @"\" +
                           ConfigurationManager.AppSettings["PictureUploadDirectory"] + @"\Diagram.jpeg";// +image.ImageName;
            if (image!=null)
            {
                //return ByteArrayToFile(filePath, image.Imagestream);
                fileStream = File.Open(filePath, FileMode.Create);
                writer = new BinaryWriter(fileStream);
                writer.Write("Diagram.jpeg");
            }
            return false;
        }

and client call is this :

var img = new WriteableBitmap(canvas1, null);
var outStream = new MemoryStream();
EncodeJpeg(img, outStream); //custom library to compress into jpeg
var client = new Service1Client();
client.UploadCompleted += new EventHandler<UploadCompletedEventArgs>(client_UploadCompleted);
client.UploadAsync(outStream.ToArray());

私の問題を解決するためのサンプルやその他の解決策を誰かが提案できますか?

4

1 に答える 1

0

最近、Silverlight で非常によく似たソリューションを実装しました。ソリューションには以下が含まれます。

  • 大きい byte[] を、Web サービス呼び出しを介して送信できるサイズの n チャンクに分割する
  • サービスへの Web 呼び出しを行い、n チャンクのファイル アップロード要求を登録し、サービスから GUID を要求します。
  • サービスに対して n 個の Web 呼び出しを行い、各チャンクをアップロードして、GUID とチャンクの序数を提供します (チャンクは順不同で到着する場合があります)。
  • サーバーが n 個のチャンクをすべて受信すると、チャンクを結合し、データをファイルに書き込みます。

これがあなたが始めるのに役立つことを願っています。

于 2013-03-15T11:54:32.143 に答える