如何将大尺寸的画布图像从silverlight发送到WCF服务

时间:2013-03-15 10:36:11

标签: wcf silverlight wcf-ria-services silverlight-5.0

我有一个大尺寸的byte []由silverlight Canvas使用以下代码

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

现在我想将它发送到WCF服务,以便从这个字节数组&将其保存为服务器端的映像,以便我可以在SSRS中使用它。我的问题是因为byte []很大我得到了从WCF服务找不到的经典方法。

我在几个链接中读到WCF流是一种选择,但在网上找不到任何样本。我的服务方法是这样的:

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());

有人可以建议一些示例或任何其他解决方案来解决我的问题。

1 个答案:

答案 0 :(得分:0)

我最近在Silverlight中实现了一个非常类似的解决方案。解决方案包括:

  • 将大字节[]划分为n个可通过网络服务调用发送的大小
  • 对服务进行Web调用,为n个块注册文件上载请求,并从服务中请求guid。
  • 对服务进行n次W​​eb调用并上传每个块,提供guid和chunk的序列(块可能不按顺序到达)。
  • 一旦服务器收到所有n个块,它就会组合块并将数据写入文件。

我希望这可以帮助您入门。