处理BLOB数据的Web服务

本文关键字:Web 服务 数据 BLOB 处理 | 更新日期: 2023-09-27 18:08:39

需要开发一些"Service"程序来接收和处理来自Oracle DB服务器的BLOB数据。客户端将用Delphi 2010编写。我可以自由选择用于生产这个项目服务器部分的技术。这就是为什么我在这里发布这个问题。你们能给我指出一些博客文章,文章,论坛,在那里我可以得到关于创建这类服务的各种信息吗?我使用过微软的WCF服务,但它通过WSDL与Delphi客户端进行了集成。现在我停在用c#编写的ASMX Web Service上,需要获得一些示例,我如何在服务器和客户端之间传输BLOB数据。如果服务器和客户端通过原始套接字进行通信,而不是将所有数据封装在SOAP中,效果会更好。提前感谢,强烈希望你的帮助,伙计们!

处理BLOB数据的Web服务

我建议您使用RemObjects SDK开发服务器&客户端web服务应用程序,它有许多Delphi不具备的特性。它们还支持不同的消息传递,因此您可以使用二进制消息而不是SOAP来传输BLOB数据,这要快得多,也更紧凑。

它们也是。net版本的服务器和客户端,所以你可以在它们之间混合使用。

处理BLOB字段的一个很好的标准方法是REST协议。

由于REST协议,您可以从其URI中获取、POST、PUT或删除二进制BLOB。也就是说,如果您的URI专用于BLOB字段,则可以使用原始二进制传输,而不能使用MTOM或Base64传输。

例如,您可以在这样的URI上使用get获取ID=123的BLOB内容:

  http://servername/service/123/blob

它也可以在标准的web浏览器中工作。因此,如果BLOB是一张图片,它应该直接显示在浏览器中。

在同一个URI上使用POST,添加一个新的blob,或者使用PUT更新blob。用DELETE动词…你删掉它。这就是RESTful在HTTP上的含义。

例如,这就是我们的mORMot框架的工作方式。通过一些专用类,它还可以快速直接访问服务器端的Oracle数据库。这种基于orm的框架的好处在于,高级客户端可以使用对象,处理的不仅仅是blob,它还可以处理url级别的安全性和身份验证。

但是如果你不需要整个RESTful ORM特性,你可以使用mORMot中可用的一些单元轻松编写自己的服务:

  • 用于快速http。基于sys的HTTP/1.1服务器,看看SynCrtSock;
  • 对于HTTP/1.1客户端访问,相同的SynCrtSock单元定义了一些客户端类;
  • 要非常快速地直接访问Oracle,请参阅SynOracle。

这是所有的开源,从Delphi 5和更高的工作。有很多可用的文档(超过600页),包括REST、ORM或n-Tier等概念的高级表示。

这是相当高级的,但问题也是如此:

如果它是一个"原始套接字",它不是一个真正的"web服务";当然也有REST或HTTP POST的中间地带。

如果您正在查看web服务,并且数据是非平凡的,那么您可能希望查看MTOM以避免base-64开销(这在WSE 3中得到支持,或者(更简单的)WCF通过basicHttpBinding)。我希望大多数工具都能合理地理解使用MTOM的基本web服务。

如果您想将数据库中的一些数据(在本例中是oracle中的blob数据)公开为web服务WSO2 DSS[1]提供了一个更简单的解决方案。这是在Apache许可下提供的,并且是免费的。由于所有WSO2产品都基于WSO2碳平台,因此您创建的服务也支持MTOM、WS-Security和其他与Web服务相关的功能。

[1] http://wso2.org/library/dss