我正在创建一个对象服务器端,它具有表示客户端对象所需的所有数据。我希望我的客户端对象拥有的一个属性是它的图标。
目前,我有以下代码。它尚未运行,我只想与S.O讨论一些事情:
public class ComponentDiagramPolygonChild
{
IconServicesSoapClient IconServicesProxy = new IconServicesSoapClient("IconServicesSoap");
public string Name { get; set; }
public byte[] Icon { get; set; }
public ComponentDiagramPolygonChild(PlanViewComponent planViewComponent)
{
Name = planViewComponent.Name;
//TODO: Can icon ever return null here?
Icon = IconServicesProxy.GetIconByID(planViewComponent.Icon).Image;
planViewComponent.
}
}
在我看来,我有两个选择:
如果我使用以前的建议,我将需要通过向服务器传递图标的ID来到服务器并请求图像数据。我相信这将是一种更简单的方法 - 我只会返回一个包含图像的内存流,并将该流加载到所需的位置。这方面的负面影响是服务器上的多次点击,这似乎是完全没必要的。
如果我使用后一个建议,我将通过网络传递(显着?)更大量的数据。我不确定字节数组是否能够正确地进行JSON化。我不确定如何获取jsonized byte []并将其转换为图像数据。
有没有人有这种情况的经验?我应该怎么解决这个问题?感谢。
编辑:做了一些阅读之后,看起来前选项是我最好的选择。
答案 0 :(得分:2)
我认为从技术和编程的角度来看,传回数据图像会很酷。
你可以使用base64编码的图像版本,大多数现代浏览器都会支持它。您也可以使用HTML5画布对象执行此操作。 Documentation is available on the MDN
但是,从实际的角度来看,最易维护的解决方案是使用ID并让它发出单独的HTTP请求。几乎不需要每个浏览器都支持HTML 5,并且您可以重用现有的图像传送系统。
如果您的服务器已经过调整,那么可以为图像提供额外的HTTP请求,如果您正在执行大量这些图像,那么服务器上的CPU负载将会大大减少。