I'm inviting you to a new Community challenge which we are starting next Monday (April 2)! Earn badges to get more points. Read more information
Reply
Highlighted
New Contributor

how to Set soap request properties

Below is the code i am using to connect to my api server, all works fine for other calls, but when it comes to uploading images, it's not working. if i copy the code into SoapUI and run from there, it does work but in SoapUI i have to change the request property "Enable inline files" to true. Does anyone knows how i can pass that property value in my below code

declare 
@Url varchar(1024),
@HttpMethod varchar(10),
@ParamsValues varchar(1024), 
@SoapAction varchar(8000) 

DECLARE @t table (ID int, strxml xml)

set @Url = 'https://api.my.com/api.asmx'
set @HttpMethod = 'soap'
set @SoapAction = '<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:apic="http://apiconn.com">
   <soap:Header/>
   <soap:Body>
      <apic:AddBook>
         <apic:addbookID>18</apic:addbookID>
         <apic:data>file:C:/temp/Book2.jpg</apic:data>
         <apic:dataType>JPG</apic:dataType>
      </apic:AddBook>
   </soap:Body>
</soap:Envelope>'


if @HttpMethod in ('get','GET') and len(@ParamsValues) > 0
begin
    set @Url = @Url + '?' + @ParamsValues	
end

declare @obj int
    ,@response varchar(8000)
    ,@Err varchar(2000)
    ,@responseText varchar(8000)
    ,@status varchar(50)
    ,@statusText varchar(1024)
    ,@method varchar(10) = (case when @HttpMethod in ('soap','SOAP') then 'POST' else @HttpMethod end)

--exec sp_OACreate 'WinHttp.WinHttpRequest.5.1', @obj out
exec sp_OACreate 'MSXML2.ServerXMLHTTP', @obj out
exec sp_OAMethod @obj, 'Open', null, @method, @Url, false

if @HttpMethod in ('get','GET')
begin
    exec sp_OAMethod @obj, 'send'
end
else if @HttpMethod in ('post','POST')
begin
    exec sp_OAMethod @obj, 'setRequestHeader', null, 'Content-Type', 'application/x-www-form-urlencoded'
    exec sp_OAMethod @obj, 'send', null, @ParamsValues
end
else if @HttpMethod in ('soap','SOAP')
begin
    if @SoapAction is null
        raiserror('@SoapAction is null', 10, 1)

    declare @host varchar(1024) = @Url
    if @host like 'http://%'
        set @host = right(@host, len(@host) - 7)
    else if @host like 'https://%'
        set @host = right(@host, len(@host) - 8)

    if charindex(':', @host) > 0 and charindex(':', @host) < charindex('/', @host)
        set @host = left(@host, charindex(':', @host) - 1)
    else 
        set @host = left(@host, charindex('/', @host) - 1)
	
    exec sp_OAMethod @obj, 'setRequestHeader', null, 'Content-Type', 'text/xml; charset=utf-8'
    exec sp_OAMethod @obj, 'setRequestHeader', null, 'Host', @host
    exec sp_OAMethod @obj, 'setRequestHeader', null, 'SOAPAction', @SoapAction
    exec sp_OAMethod @obj, 'send', null, @SoapAction
end

Insert into @t (strxml) 
exec sp_OAGetProperty @obj, 'responseXML.xml' --, @responseText out
exec sp_OAGetProperty @obj, 'Status', @status out
exec sp_OADestroy @obj

declare @X xml
select @X = strxml from @t

select @Err
SELECT @X
SELECT @status