2011-09-13 59 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