SQL Server
SQL Server
SOAP with MTOM XOP 8bit (binary) Attachment
See more HTTP Examples
Demonstrates how to send the following sample SOAP request with an MTOM/XOP attachment:
Content-Type: Multipart/Related; start-info="text/xml"; type="application/xop+xml"; boundary="----=_Part_0_1744155.1118953559416"
Content-Length: 3453
SOAPAction: "some-SOAP-action"
------=_Part_1_4558657.1118953559446
Content-Type: application/xop+xml; type="text/xml"; charset=utf-8
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<Detail xmlns="http://example.org/mtom/data">
<image>
<xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:5aeaa450-17f0-4484-b845-a8480c363444@example.org" />
</image>
</Detail>
</soap:Body>
</soap:Envelope>
------=_Part_1_4558657.1118953559446
Content-Type: image/jpeg
Content-ID: _LT_5aeaa450-17f0-4484-b845-a8480c363444@example.org_GT_
Content-Disposition: 8bit
... binary data ...
Chilkat SQL Server Downloads
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
DECLARE @hr int
-- Important: Do not use nvarchar(max). See the warning about using nvarchar(max).
DECLARE @sTmp0 nvarchar(4000)
DECLARE @success int
SELECT @success = 0
-- This example requires the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.
DECLARE @http int
EXEC @hr = sp_OACreate 'Chilkat.Http', @http OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
DECLARE @soapXml int
EXEC @hr = sp_OACreate 'Chilkat.Xml', @soapXml OUT
EXEC sp_OASetProperty @soapXml, 'Tag', 'soap:Envelope'
EXEC sp_OAMethod @soapXml, 'AddAttribute', @success OUT, 'xmlns:soap', 'http://schemas.xmlsoap.org/soap/envelope/'
EXEC sp_OAMethod @soapXml, 'NewChild2', NULL, 'soap:Body', ''
EXEC sp_OAMethod @soapXml, 'GetChild2', @success OUT, 0
EXEC sp_OAMethod @soapXml, 'NewChild2', NULL, 'Detail', ''
EXEC sp_OAMethod @soapXml, 'GetChild2', @success OUT, 0
EXEC sp_OAMethod @soapXml, 'AddAttribute', @success OUT, 'xmlns', 'http://example.org/mtom/data'
EXEC sp_OAMethod @soapXml, 'NewChild2', NULL, 'image', ''
EXEC sp_OAMethod @soapXml, 'GetChild2', @success OUT, 0
EXEC sp_OAMethod @soapXml, 'NewChild2', NULL, 'xop:Include', ''
EXEC sp_OAMethod @soapXml, 'GetChild2', @success OUT, 0
EXEC sp_OAMethod @soapXml, 'AddAttribute', @success OUT, 'xmlns:xop', 'http://www.w3.org/2004/08/xop/include'
EXEC sp_OAMethod @soapXml, 'AddAttribute', @success OUT, 'href', 'cid:5aeaa450-17f0-4484-b845-a8480c363444@example.org'
EXEC sp_OAMethod @soapXml, 'GetRoot2', NULL
EXEC sp_OASetProperty @soapXml, 'EmitXmlDecl', 0
DECLARE @xmlBody nvarchar(4000)
EXEC sp_OAMethod @soapXml, 'GetXml', @xmlBody OUT
PRINT @xmlBody
DECLARE @req int
EXEC @hr = sp_OACreate 'Chilkat.HttpRequest', @req OUT
EXEC sp_OASetProperty @req, 'HttpVerb', 'POST'
EXEC sp_OASetProperty @req, 'Path', '/something/someTarget'
EXEC sp_OASetProperty @req, 'ContentType', 'multipart/related; start-info="text/xml"; type="application/xop+xml"'
EXEC sp_OAMethod @req, 'AddHeader', NULL, 'SOAPAction', 'some-SOAP-action'
EXEC sp_OAMethod @req, 'AddStringForUpload2', @success OUT, '', '', @xmlBody, 'utf-8', 'application/xop+xml; type="text/xml"; charset=utf-8'
-- The bytes will be sent as binary (not base64 encoded).
EXEC sp_OAMethod @req, 'AddFileForUpload2', @success OUT, '', 'qa_data/jpg/starfish.jpg', 'image/jpeg'
-- The JPEG data is the 2nd sub-part, and therefore is at index 1 (the first sub-part is at index 0)
EXEC sp_OAMethod @req, 'AddSubHeader', @success OUT, 1, 'Content-ID', '<5aeaa450-17f0-4484-b845-a8480c363444@example.org>'
-- Add the Content-Disposition: 8bit sub-header
EXEC sp_OAMethod @req, 'AddSubHeader', @success OUT, 1, 'Content-Disposition', '8bit'
EXEC sp_OASetProperty @http, 'FollowRedirects', 1
-- For debugging, set the SessionLogFilename property
-- to see the exact HTTP request and response in a log file.
-- (Given that the request contains binary data, you'll need an editor
-- that can gracefully view text + binary data. I use EmEditor for most simple editing tasks..)
EXEC sp_OASetProperty @http, 'SessionLogFilename', 'qa_output/mtom_sessionLog.txt'
DECLARE @useTls int
SELECT @useTls = 1
-- Note: Please don't run this example without changing the domain to your own domain...
DECLARE @resp int
EXEC @hr = sp_OACreate 'Chilkat.HttpResponse', @resp OUT
EXEC sp_OAMethod @http, 'HttpSReq', @success OUT, 'www.example.org', 443, @useTls, @req, @resp
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @http, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @http
EXEC @hr = sp_OADestroy @soapXml
EXEC @hr = sp_OADestroy @req
EXEC @hr = sp_OADestroy @resp
RETURN
END
DECLARE @xmlResponse int
EXEC @hr = sp_OACreate 'Chilkat.Xml', @xmlResponse OUT
EXEC sp_OAGetProperty @resp, 'BodyStr', @sTmp0 OUT
EXEC sp_OAMethod @xmlResponse, 'LoadXml', @success OUT, @sTmp0
EXEC sp_OAMethod @xmlResponse, 'GetXml', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @http
EXEC @hr = sp_OADestroy @soapXml
EXEC @hr = sp_OADestroy @req
EXEC @hr = sp_OADestroy @resp
EXEC @hr = sp_OADestroy @xmlResponse
END
GO