ParcelDownloadGZip - LorenData/ECGrid-API GitHub Wiki
Download Parcel from InBox or Archive with GZip compression.
public FileInfo ParcelDownloadGZip(string SessionID, long ParcelID)
Downloads a complete Parcel from ECGrid as long as it has not been archived.
Once a Parcel has been successfully downloaded from the InBox the first time, ParcelDownloadConfirm() should be called to remove it from the pending download list.
If the payload is non-EDI data, uploaded with ParcelUploadEx() or ParcelUploadGZipEx(), then function will automatically strip the envelope and restore the original file name.
C#
using System.Xml;
using System.Web.Services.Protocols;
using System.IO.Compression;
using System.IO;
using System.Text;
using ECGridService = <ProjectName>.net.ecgridos;
try
{
using (ECGridService.ECGridOSAPIv3 ECGrid = new ECGridService.ECGridOSAPIv3())
{
try
{
string SessionID = "00000000-0000-0000-0000-000000000000";
long ParcelID = 46446847;
ECGridService.FileInfo ParcelDownloadGZipFile = ECGrid.ParcelDownloadGZip(SessionID, ParcelID);
// Write GZ to String/File using Stream Copy To
string ParcelString = "";
string LocalFilePath = Path.Combine(@"C:\EDI", ParcelDownloadGZipFile.FileName);
// Write Compressed Byte[] to Memory Stream
using (var compressedMemoryStream = new MemoryStream(ParcelDownloadGZipFile.Content))
{
// Create Decompressed Output Memory Stream
using (var decompressedOutputMemoryStream = new MemoryStream())
{
// GZip Decompress the Compressed Memory Stream
using (var gzipDecompressedStream = new GZipStream(compressedMemoryStream, CompressionMode.Decompress))
{
//Copy the GZip Decompressed MemoryStream to the decompressedOutputMemoryStream
gzipDecompressedStream.CopyTo(decompressedOutputMemoryStream);
}
ParcelString = Encoding.ASCII.GetString(decompressedOutputMemoryStream.ToArray());
File.WriteAllBytes(LocalFilePath, decompressedOutputMemoryStream.ToArray());
using (FileStream fs = new FileStream(LocalFilePath, FileMode.Create, FileAccess.Write))
{
fs.Write(decompressedOutputMemoryStream.ToArray(), 0, BitConverter.ToInt32(decompressedOutputMemoryStream.ToArray(),0));
}
}
}
// Write GZ to String/File with buffer
using (MemoryStream compressedMemoryStream = new MemoryStream())
{
// Get Length of Compressed Bytes
// Write Compressed Byte[] to Memory Stream
int msgLength = BitConverter.ToInt32(ParcelDownloadGZipFile.Content, 0);
compressedMemoryStream.Write(ParcelDownloadGZipFile.Content, 4, ParcelDownloadGZipFile.Content.Length - 4);
// Create Byte[] for Decompressed Bytes
byte[] decompressedBuffer = new byte[msgLength];
// Start at Compressed Memory Stream buffer Position 0
// GZip Decompress the Compressed Memory Stream to the Decompressed Byte[] Buffer
compressedMemoryStream.Position = 0;
using (GZipStream zip = new GZipStream(compressedMemoryStream, CompressionMode.Decompress))
{
zip.Read(decompressedBuffer, 0, decompressedBuffer.Length);
}
// Convert the Decompressed Byte[] Buffer to String
ParcelString = Encoding.ASCII.GetString(decompressedBuffer);
File.WriteAllBytes(LocalFilePath, decompressedBuffer);
using (FileStream fs = new FileStream(LocalFilePath, FileMode.Create, FileAccess.Write))
{
fs.Write(decompressedBuffer,0, decompressedBuffer.Length);
}
}
}
catch (SoapException SoapEx)
{
// See SOAP Exceptions in the Appendix
var ECG_Ex = CatchException(SoapEx);
Console.WriteLine($"ECGridOS Soap Exception: {ECG_Ex.ErrorCode} , Item: {ECG_Ex.ErrorItem}, Message: {ECG_Ex.ErrorMessage}, String: {ECG_Ex.ErrorString}");
}
} // END USING
}
catch (Exception ex){ Console.WriteLine("Unhandled Exception: " + ex.ToString()); }
The following is a sample SOAP 1.1 request and response. The placeholders shown need to be replaced with actual values.
POST /v3.2/prod/ecgridos.asmx HTTP/1.1
Host: ecgridos.net
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://ecgridos.net/ParcelDownloadGZip"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ParcelDownloadGZip xmlns="http://ecgridos.net/">
<SessionID>string</SessionID>
<ParcelID>long</ParcelID>
</ParcelDownloadGZip>
</soap:Body>
</soap:Envelope>
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ParcelDownloadGZipResponse xmlns="http://ecgridos.net/">
<ParcelDownloadGZipResult>
<ParcelID>long</ParcelID>
<FileName>string</FileName>
<FileDate>dateTime</FileDate>
<Bytes>int</Bytes>
<Standard>X12 or EDIFACT or TRADACOMS or VDA or XML or TXT or PDF or Binary</Standard>
<Content>base64Binary</Content>
</ParcelDownloadGZipResult>
</ParcelDownloadGZipResponse>
</soap:Body>
</soap:Envelope>
The following is a sample SOAP 1.2 request and response. The placeholders shown need to be replaced with actual values.
POST /v3.2/prod/ecgridos.asmx HTTP/1.1
Host: ecgridos.net
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<ParcelDownloadGZip xmlns="http://ecgridos.net/">
<SessionID>string</SessionID>
<ParcelID>long</ParcelID>
</ParcelDownloadGZip>
</soap12:Body>
</soap12:Envelope>
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<ParcelDownloadGZipResponse xmlns="http://ecgridos.net/">
<ParcelDownloadGZipResult>
<ParcelID>long</ParcelID>
<FileName>string</FileName>
<FileDate>dateTime</FileDate>
<Bytes>int</Bytes>
<Standard>X12 or EDIFACT or TRADACOMS or VDA or XML or TXT or PDF or Binary</Standard>
<Content>base64Binary</Content>
</ParcelDownloadGZipResult>
</ParcelDownloadGZipResponse>
</soap12:Body>
</soap12:Envelope>
The following is a sample HTTP GET request and response. The placeholders shown need to be replaced with actual values.
GET /v3.2/prod/ecgridos.asmx/ParcelDownloadGZip?SessionID=string&ParcelID=string HTTP/1.1
Host: ecgridos.net
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<FileInfo xmlns="http://ecgridos.net/">
<ParcelID>long</ParcelID>
<FileName>string</FileName>
<FileDate>dateTime</FileDate>
<Bytes>int</Bytes>
<Standard>X12 or EDIFACT or TRADACOMS or VDA or XML or TXT or PDF or Binary</Standard>
<Content>base64Binary</Content>
</FileInfo>
The following is a sample HTTP POST request and response. The placeholders shown need to be replaced with actual values.
POST /v3.2/prod/ecgridos.asmx/ParcelDownloadGZip HTTP/1.1
Host: ecgridos.net
Content-Type: application/x-www-form-urlencoded
Content-Length: length
SessionID=string&ParcelID=string
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<FileInfo xmlns="http://ecgridos.net/">
<ParcelID>long</ParcelID>
<FileName>string</FileName>
<FileDate>dateTime</FileDate>
<Bytes>int</Bytes>
<Standard>X12 or EDIFACT or TRADACOMS or VDA or XML or TXT or PDF or Binary</Standard>
<Content>base64Binary</Content>
</FileInfo>