2011-09-13 60 views
4

需要开发一些“服务”程序来接收和处理来自Oracle DB服务器的BLOB数据。客户将使用Delphi 2010编写。我可以自由选择使用哪些技术来生成此项目的服务器部分。这就是为什么我在这里发布这个问题。你们能否指点我一些博客文章,文章,论坛,我可以获得有关创建此类服务的各种信息?我有微软WCF服务的经验,但它通过WSDL与Delphi客户端进行了一体化。现在我停止使用C#编写的ASMX Web服务,并且需要获取一些示例,如何在服务器和客户端之间传输BLOB数据。如果服务器和客户端通过原始套接字进行通信,而不是封装SOAP中的所有数据,那将会更好。在此先感谢您,并且非常希望您能提供帮助,伙计们!处理BLOB数据的Web服务

回答

1

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

如果它是一个“原始套接字”,它是不是一个真正的“网络服务”;虽然当然有REST或HTTP POST的中间立场。

如果你正在寻找一个web服务,并且数据是不平凡的,那么你可能想要看看MTOM以避免base-64开销(这在WSE 3中支持,或者(简单的)WCF通过basicHttpBinding)。我希望大多数工具能够合理理解使用MTOM的基本Web服务。

+0

感谢您的回答Marc!基本上我需要Web服务,因为会有另一种内部方法来提供额外的数据。你能给我发送一些我应该阅读的链接吗? – kseen

+0

使用REST风格的方法,使用Base-64或MTOM不是必需的。您可以为主RESTful URI内的blob字段指定一个sub-url地址。 HTTP喜欢二进制。如果您可以使用URI,则不必使其变得更加复杂。 –

5

我会建议你使用RemObjects SDK用于开发服务器端& Web服务应用程序,它具有德尔福&净没有的许多功能,也支持他们不同的消息,这样你就可以使用二进制消息而不是SOAP来传输BLOB数据更快,更紧凑。

它们也是.Net版本的服务器和客户端,所以你可以在它们之间进行混合。

+1

同意,我使用RO SDK二进制发送大型数据文件。我选择将它们分成不同的部分,以便我可以控制连接的流程和失败,但它工作得很好。还有一个样品。 – mj2008

+0

RemObjects的+1 – RBA

+0

好的,谢谢你们!这是商业解决方案吗? – kseen

1

处理BLOB字段的好方法是REST协议。

感谢REST协议,您可以从其URI获取,POST,放置或删除二进制BLOB。也就是说,如果您的URI专用于BLOB字段,则可以使用原始二进制传输,而不需要MTOM或Base64传输。

举例来说,你可以在这样一个URI得到BLOB内容与ID = 123用GET:

http://servername/service/123/blob 

它会从一个标准的Web浏览器也行。所以如果BLOB是一张图片,它应该直接在浏览器中显示。

使用同一个URI的POST,添加一个新的blob,或者使用PUT更新blob。用DELETE动词...删除它。这就是RESTful通过HTTP的含义。例如,这是我们的mORMot框架的工作原理。它也能够fast have direct access to the Oracle database on the server side,以及一些专门的课程。这种基于ORM的框架的好处在于,高级客户可以使用对象,并且处理的不仅仅是BLOB,而且它可以处理URL-level security and authentication

但是你可以很容易地使用一些mORMot可用的单位,如果你不需要整个REST风格的ORM功能,编写自己的服务:

这是所有开放源代码,从Delphi 5和更高版本开始工作。有a lot of documentation available (more than 600 pages),其中包括REST,ORM或n-Tier等概念的高级表示。

0

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

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