求助,silverlight如何显示二进制流图片?

longboyq 2010-05-06 10:53:44
如,数据库table1表中有PhotoContext字段,该字段为Image类型,就是用来存放图片的二进制。

我在图片上传时,采用将图片转换成二进制存入数据库,现在不知道如何取出来。我在silverlight端采用的是wcf服务来读取

table1表。数据可以取出来,但是返回给silverlight端会报长度超过。

我在web.config中配置如下:

<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="web.DBServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IDataService" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647">
<readerQuotas maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxDepth="2147483647" maxNameTableCharCount="2147483647" maxStringContentLength="2147483647"/>
</binding>
</basicHttpBinding>
</bindings>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<services>
<service behaviorConfiguration="web.DBServiceBehavior" name="web.DBService">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IDataService" contract="web.DBService"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
</system.serviceModel>


silverlight端的ServiceReferences.ClientConfig中配置如下:

<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_DBService" maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647">
<security mode="None">
<transport>
<extendedProtectionPolicy policyEnforcement="Never" />
</transport>
</security>
</binding>
<binding name="BasicHttpBinding_DBService1" maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647">
<security mode="None">
<transport>
<extendedProtectionPolicy policyEnforcement="Never" />
</transport>
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost/PhotoManage/DBService.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_DBService"
contract="DBService.DBService" name="BasicHttpBinding_DBService" />
<endpoint address="http://longbo/PhotoManage/DBService.svc" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_DBService1" contract="DBService.DBService"
name="BasicHttpBinding_DBService1" />
</client>
</system.serviceModel>
</configuration>



请问大家有什么办法可以解决过长的问题?并且在silverlight中用BitmapImage来显示图片?

希望能帮忙解决问题,非常感谢。
...全文
719 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
W511522329 2010-09-25
  • 打赏
  • 举报
回复
在wcf服务配置的时候选择集合类型就有list型了,
longboyq 2010-05-10
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 dancingbeijing_2008 的回复:]
http://ghl68754031.k15.wg8.com/post/27.html

这个可能有帮助
[/Quote]

显示问题我已经解决了,图片大的话从WCF传到SL端的问题。不知道有没有好的解决方法。
longboyq 2010-05-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 madaming 的回复:]
这个问题应该很容易解决,近年春节期间我询问了有关显示数据库中image字段中的图像的方法,网上高手给了我解决办法,等我找到那段代码后发给你。
[/Quote]

谢谢,期待啊
海涵德 2010-05-09
  • 打赏
  • 举报
回复
这个问题应该很容易解决,近年春节期间我询问了有关显示数据库中image字段中的图像的方法,网上高手给了我解决办法,等我找到那段代码后发给你。
雪融无声 2010-05-09
  • 打赏
  • 举报
回复
http://ghl68754031.k15.wg8.com/post/27.html

这个可能有帮助
longboyq 2010-05-08
  • 打赏
  • 举报
回复
我传输的字节数错了。可能是我实现的方式不对,请教下详细的WCF分段传输方法。谢谢
longboyq 2010-05-08
  • 打赏
  • 举报
回复
今天改进了一下WCF分段传输的方法,终于可以显示数据库的图片了。

现在又遇到个问题就是我想将DataSet转成Byte[],分段传给SL端,但是SL端不知道怎么转成List<>。请问大家有什么好的办法吗?

能否将DataSet序列化成string,然后将string转成Byte[],分段传给SL端后再将值转成string后反序列化为List<>。有具体实现的代码吗?
longboyq 2010-05-07
  • 打赏
  • 举报
回复
非常感谢,正在看分段传输是怎么实现的。
jv9 2010-05-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 longboyq 的回复:]
弄了半天,总算把实现了通过wcf分段传给sl端,但是在sl端还是没办法显示图片,不知道为什么。

我代码这样写的:

C# code

BitmapImage bi = new BitmapImage();

bi.SetSource(new MemoryStream(objDataSet));

Image image = new Image();
image.Source……
[/Quote]

传输字节数正确么?Debug看image
mengKzhaoyun 2010-05-07
  • 打赏
  • 举报
回复
1.首先解决长度超过的问题
【随】WCF传输大数据的设置
虽然可以改变WCF的最大传输设置,但最好还是学学怎么分段传输如下:
Silverlight+WCF文件上传,含分段大小调节(WCF 16KB配置)、压缩Buffer调节、速度指示、批量等

2.如何显示数据源为Byte[]的图片:


// 摘要:
// 基于字节数组的指定区域(索引)初始化 System.IO.MemoryStream 类的无法调整大小的新实例。
//
// 参数:
// buffer:
// 从中创建该流的无符号字节数组。
//
// index:
// buffer 内的索引,流从此处开始。
//
// count:
// 流的长度(以字节为单位)。
//
// 异常:
// System.ArgumentNullException:
// buffer 为 null。
//
// System.ArgumentOutOfRangeException:
// index 或 count 小于零。
//
// System.ArgumentException:
// index 与 count 的和大于 buffer 的长度。
public MemoryStream(byte[] buffer, int index, int count);

// 摘要:
// 设置 System.Windows.Media.Imaging.BitmapSource 的源。
//
// 参数:
// streamSource:
// 要将源设置为的流。
public void SetSource(Stream streamSource);



使用上面两个方法来读取Byte[]数据到图片中。
mengKzhaoyun 2010-05-07
  • 打赏
  • 举报
回复
报啥错啊?
longboyq 2010-05-07
  • 打赏
  • 举报
回复
估计是数据流的问题,我图片格式是JPG和PNG格式的,没有GIF。
blackant2 2010-05-07
  • 打赏
  • 举报
回复
从代码看,可能是图片格式的问题
--当然也可能是数据流错误
longboyq 2010-05-07
  • 打赏
  • 举报
回复
弄了半天,总算把实现了通过wcf分段传给sl端,但是在sl端还是没办法显示图片,不知道为什么。

我代码这样写的:

BitmapImage bi = new BitmapImage();

bi.SetSource(new MemoryStream(objDataSet));

Image image = new Image();
image.Source = bi;
this.LayoutRoot.Children.Add(image);


到SetSource的时候就报错。不知道是不是分段传输的时候数据丢了还是别的原因,能帮忙解决下吗?感谢

8,735

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧