This example shows an InterSystems IRIS web service that receives a binary file and sends it back to the caller.
The corresponding web client sends a file with a hardcoded filename, receives the same file from the web service, and then saves it with a new name to prove that it has been successfully sent.
Web Client
The generated web client (MTOMClient.RoundTripSoap) contains the method ReceiveFile(), which invokes the web method of the same name. This method is originally as follows:
Method ReceiveFile(attachment As %xsd.base64Binary) As %xsd.base64Binary
[ Final, SoapBindingStyle = document, SoapBodyUse = literal, WebMethod ]
{
Quit ..WebMethod("ReceiveFile").Invoke($this,"https://www.roundtrip.org/MTOM.RoundTripWS.ReceiveFile",
.attachment)
}
Because the files we send might exceed the string length limit, we adjust the method signature as follows:
Method ReceiveFile(attachment As %GlobalBinaryStream) As %GlobalBinaryStream
[ Final, SoapBindingStyle = document, SoapBodyUse = literal, WebMethod ]
{
Quit ..WebMethod("ReceiveFile").Invoke($this,"https://www.roundtrip.org/MTOM.RoundTripWS.ReceiveFile",
.attachment)
}
MTOM is not required by default in the web client; that is, the MTOMREQUIRED parameter is not defined.
To use this proxy client, we create the following class:
Include %systemInclude
Class MTOMClient.UseClient
{
/// For this example, hardcode what we are sending
ClassMethod SendFile() As %GlobalBinaryStream
{
Set client=##class(MTOMClient.RoundTripSoap).%New()
Set client.MTOMRequired=1
//reset location to port 8080 to enable tracing
Set client.Location="https://devsys:8080/csp/mysamples/MTOM.RoundTripWS.cls"
//create file
Set filename="c:\sample.pdf"
Set file=##class(%Library.FileBinaryStream).%New()
Set file.Filename=filename
//create %GlobalBinaryStream
Set attachment=##class(%GlobalBinaryStream).%New()
Do attachment.CopyFrom(file)
//call the web service
Set answer=client.ReceiveFile(attachment)
//save the received file to prove we made the round trip successfully
Set newfilename="c:\roundtrip"_$h_"sample.pdf"
Set newfile=##class(%Library.FileBinaryStream).%New()
Set newfile.Filename=newfilename
Do newfile.CopyFromAndSave(answer)
Quit answer
}
}