2010-08-29 132 views
4

我能够返回一个图片从我的.NET Web服务的字节数组..从.NET Web服务

我的问题是,返回一个以上的图像,如果我想返回不止什么一个请求中的单个图像。 例如,我的网站目前的方法看起来是这样的:

public byte[] GetImage(string filename) 

。但我试图找出是我怎么会实现更多的东西是这样的:

public ..?... GetAllMemberStuffInOneHit(string memberID) 

这例如,返回一些图像,以及一些其他信息,例如成员姓名和部门。

可以这样做吗?请帮助,谢谢。

+0

什么样的网络服务? WCF或ASMX? – 2010-08-29 02:11:34

回答

4

绝对。不要只返回一个字节数组,而要创建一个具有字节数组以及潜在的其他有用信息(文件名,内容类型等)的DTO类。然后,只需返回这些IList。事情是这样的:

public class MyImage 
{ 
    public byte[] ImageData { get; set; } 
    public string Name { get; set; } 
    public MyImage() 
    { 
     // maybe initialize defaults here, etc. 
    } 
} 

public List<MyImage> GetAllMemberStuffInOneHit(string memberID) 
{ 
    // implementation 
} 

因为你的方法,顾名思义是要返回更多的信息,您可以创建更多的DTO类,并建立他们共同创造一个“成员”对象。事情是这样的:

public class Member 
{ 
    public List<MyImage> Images { get; set; } 
    public string Name { get; set; } 
    public DateTime LastLogin { get; set; } 
    // etc. 
} 

public Member GetAllMemberStuffInOneHit(string memberID) 
{ 
    // implementation 
} 
+0

谢谢,生病让你知道它是如何:) – Mikey 2010-08-29 03:00:21

+0

你们是辉煌!谢谢,它工作。 最后一件事,在我的客户端应用程序中,我必须更改配置值-BufferSize和MaxArrayLength等......我将它们分别从16384和65536更改为116384和165536。 为什么这些最初是如此限制,增加这些项目是否存在风险? – Mikey 2010-08-29 03:34:58

+0

@Mikey:唯一的风险就是允许大量的数据包通过服务边界传输。在我上一份工作中,我们把它定为2 GB,这有点令人不安,但工作得很好。 – David 2010-08-29 11:55:21

1

一个简单的解决方法就是返回一个List<byte[]>集合,像这样:

[WebMethod] 
public List<byte[]> GetAllImages(string memberID) 
{ 
    List<byte[]> collection = new List<byte[]>(); 
    // fetch images one at a time and add to collection 
    return collection; 
} 

要使用此,你需要这条线在你Service.cs文件的顶部:

using System.Collections.Generic;