Skip to content

ParcelDownloadGZip

Greg Kolinski edited this page Sep 20, 2017 · 1 revision

Back To Common API Calls


Download Parcel from InBox or Archive with GZip compression.

 public FileInfo ParcelDownloadGZip(string SessionID, long ParcelID)

Parameters:


Returns

FileInfo


Remarks

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.


Code Example

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()); }

SOAP 1.1

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>

SOAP 1.2

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>

HTTP GET

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>

HTTP POST

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>

Back To Common API Calls

Clone this wiki locally