首页新闻找找看学习计划

WCF服务方法返回一个图像对象(Image或Bitmap)出错,如何解决?

1
悬赏园豆:20 [已解决问题] 解决于 2010-12-08 17:41

我先定义一个契约
    [ServiceContract]
    public interface IMessage
    {
        [OperationContract]
        Image GetImage();
    }

再实现它
    public class MessageService : IMessage
    {
        public Image GetImage()
        {
            return  Image.FromFile("用户管理.png");
        }
    }
采用TCP绑定,客户端调用的时候始终都是报错,显示超时时间已到。把超时时间改大也没用。

但是我使用Stream替换Image却可以返回,如下

    public class MessageService : IMessage
    {
        public Stream GetImage()
        {

     Stream sm=FileStream.........
            return sm;
        }
    }

 

请问 WCF方法如何才能正确返回图像?

另外我的其他WCF方法中也有类似问题,如下

    public class MessageService : IMessage
    {
        public 我的自定义类 GetImage()
        {

     我的自定义类 aa =new 我的自定义类();
            return aa;
        }
    }

我的自定义类中有一个属性类型是Image,当aa.Image为null的时候这个方法没问题,客户端可以正确返回值,但是如果不为null,那么就肯定出现上面一样的超时错误,求大虾帮忙解决!

大鼻子的主页 大鼻子 | 初学一级 | 园豆:180
提问于:2010-12-07 14:23
< >
分享
最佳答案
0

你使用的真实类型是Bitmap,你可以试试下面两种解决方案:
1、将ServiceContract的返回值类型从Image换成Bitmap ;
2、通过System.ServiceModel.ServiceKnownTypeAttribute让Bitmap变成已知类型

收获园豆:16
Artech | 菜鸟二级 |园豆:287 | 2010-12-08 17:02
蒋老师不愧是高手中的高手,一下子就解决了困扰了我很久的问题,真的很谢谢你!
大鼻子 | 园豆:180 (初学一级) | 2010-12-08 17:42
其他回答(2)
0

把你自定义的类弄成可序列化看行不       我猜的···

收获园豆:2
写代码的小2B | 园豆:4346 (老鸟四级) | 2010-12-07 14:58
应该跟序列化没关系吧,毕竟Image为Null就能正常调用。 另外一个 直接返回Image出错 这个是为什么?
支持(0) 反对(0) 大鼻子 | 园豆:180 (初学一级) | 2010-12-07 15:55
0

同楼上,是不是你的自定义类不允许序列化?

收获园豆:2
顾晓北 | 园豆:9534 (大侠五级) | 2010-12-07 15:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册