我在图片上传时,采用将图片转换成二进制存入数据库,现在不知道如何取出来。我在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来显示图片?
希望能帮忙解决问题,非常感谢。
14 个解决方案
#1
1.首先解决长度超过的问题
【随】WCF传输大数据的设置
虽然可以改变WCF的最大传输设置,但最好还是学学怎么分段传输如下:
Silverlight+WCF文件上传,含分段大小调节(WCF 16KB配置)、压缩Buffer调节、速度指示、批量等
2.如何显示数据源为Byte[]的图片:
使用上面两个方法来读取Byte[]数据到图片中。
【随】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[]数据到图片中。
#2
非常感谢,正在看分段传输是怎么实现的。
#3
弄了半天,总算把实现了通过wcf分段传给sl端,但是在sl端还是没办法显示图片,不知道为什么。
我代码这样写的:
到SetSource的时候就报错。不知道是不是分段传输的时候数据丢了还是别的原因,能帮忙解决下吗?感谢
我代码这样写的:
BitmapImage bi = new BitmapImage();
bi.SetSource(new MemoryStream(objDataSet));
Image image = new Image();
image.Source = bi;
this.LayoutRoot.Children.Add(image);
到SetSource的时候就报错。不知道是不是分段传输的时候数据丢了还是别的原因,能帮忙解决下吗?感谢
#4
从代码看,可能是图片格式的问题
--当然也可能是数据流错误
--当然也可能是数据流错误
#5
估计是数据流的问题,我图片格式是JPG和PNG格式的,没有GIF。
#6
报啥错啊?
#7
传输字节数正确么?Debug看image
#8
我传输的字节数错了。可能是我实现的方式不对,请教下详细的WCF分段传输方法。谢谢
#9
今天改进了一下WCF分段传输的方法,终于可以显示数据库的图片了。
现在又遇到个问题就是我想将DataSet转成Byte[],分段传给SL端,但是SL端不知道怎么转成List<>。请问大家有什么好的办法吗?
能否将DataSet序列化成string,然后将string转成Byte[],分段传给SL端后再将值转成string后反序列化为List<>。有具体实现的代码吗?
现在又遇到个问题就是我想将DataSet转成Byte[],分段传给SL端,但是SL端不知道怎么转成List<>。请问大家有什么好的办法吗?
能否将DataSet序列化成string,然后将string转成Byte[],分段传给SL端后再将值转成string后反序列化为List<>。有具体实现的代码吗?
#10
http://ghl68754031.k15.wg8.com/post/27.html
这个可能有帮助
这个可能有帮助
#11
这个问题应该很容易解决,近年春节期间我询问了有关显示数据库中image字段中的图像的方法,网上高手给了我解决办法,等我找到那段代码后发给你。
#12
谢谢,期待啊
#13
显示问题我已经解决了,图片大的话从WCF传到SL端的问题。不知道有没有好的解决方法。
#14
在wcf服务配置的时候选择集合类型就有list型了,
#1
1.首先解决长度超过的问题
【随】WCF传输大数据的设置
虽然可以改变WCF的最大传输设置,但最好还是学学怎么分段传输如下:
Silverlight+WCF文件上传,含分段大小调节(WCF 16KB配置)、压缩Buffer调节、速度指示、批量等
2.如何显示数据源为Byte[]的图片:
使用上面两个方法来读取Byte[]数据到图片中。
【随】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[]数据到图片中。
#2
非常感谢,正在看分段传输是怎么实现的。
#3
弄了半天,总算把实现了通过wcf分段传给sl端,但是在sl端还是没办法显示图片,不知道为什么。
我代码这样写的:
到SetSource的时候就报错。不知道是不是分段传输的时候数据丢了还是别的原因,能帮忙解决下吗?感谢
我代码这样写的:
BitmapImage bi = new BitmapImage();
bi.SetSource(new MemoryStream(objDataSet));
Image image = new Image();
image.Source = bi;
this.LayoutRoot.Children.Add(image);
到SetSource的时候就报错。不知道是不是分段传输的时候数据丢了还是别的原因,能帮忙解决下吗?感谢
#4
从代码看,可能是图片格式的问题
--当然也可能是数据流错误
--当然也可能是数据流错误
#5
估计是数据流的问题,我图片格式是JPG和PNG格式的,没有GIF。
#6
报啥错啊?
#7
传输字节数正确么?Debug看image
#8
我传输的字节数错了。可能是我实现的方式不对,请教下详细的WCF分段传输方法。谢谢
#9
今天改进了一下WCF分段传输的方法,终于可以显示数据库的图片了。
现在又遇到个问题就是我想将DataSet转成Byte[],分段传给SL端,但是SL端不知道怎么转成List<>。请问大家有什么好的办法吗?
能否将DataSet序列化成string,然后将string转成Byte[],分段传给SL端后再将值转成string后反序列化为List<>。有具体实现的代码吗?
现在又遇到个问题就是我想将DataSet转成Byte[],分段传给SL端,但是SL端不知道怎么转成List<>。请问大家有什么好的办法吗?
能否将DataSet序列化成string,然后将string转成Byte[],分段传给SL端后再将值转成string后反序列化为List<>。有具体实现的代码吗?
#10
http://ghl68754031.k15.wg8.com/post/27.html
这个可能有帮助
这个可能有帮助
#11
这个问题应该很容易解决,近年春节期间我询问了有关显示数据库中image字段中的图像的方法,网上高手给了我解决办法,等我找到那段代码后发给你。
#12
谢谢,期待啊
#13
显示问题我已经解决了,图片大的话从WCF传到SL端的问题。不知道有没有好的解决方法。
#14
在wcf服务配置的时候选择集合类型就有list型了,