Gönderilen ve alınan(talep edilen) veri boyutu öndeğerlerin üzerinde olabilir. Logo Object Service içerisinde bu değerler maximum alabileceği değerler ile set edilmiştir. Ancak alıcı tarafında, kendi projenizde de bu değerlerin belirtilmesi gerekmektedir. Aşağıdaki örnek .NET projesinde, servisin HTTP ucu kullanıldığında set edilmesi gereken app.Config değerleridir.

app.Config
<?xml version="1.0"encoding="utf-8"?>
<configuration>

    <system.serviceModel>

      <bindings>

      <basicHttpBinding>

        <binding

            name="BasicHttpBinding_ISvc"

            maxBufferPoolSize="2147483647"

            maxBufferSize="2147483647"

            maxReceivedMessageSize="2147483647"

            receiveTimeout="00:30:00"

            sendTimeout="00:01:00">

          <securitymode="None"/>

          <readerQuotas

               maxStringContentLength="2147483647"

               maxArrayLength="16384"

               maxBytesPerRead="4096"

               maxDepth="32"

               maxNameTableCharCount="16384"

                   />

        </binding>

      </basicHttpBinding>

      </bindings>

      <client>

            <endpointaddress="http://localhost/LogoObjectService/Service"
                binding="basicHttpBinding"bindingConfiguration="BasicHttpBinding_ISvc"
                contract="ServiceReference2.ISvc"name="BasicHttpBinding_ISvc"/>

        </client>

    </system.serviceModel>

</configuration> 

Sıkıştırma-açma kodu aşağıdaki gibidir. Bu kodu projenize eklemelisiniz. Metodların içerisindeki bazı fonksiyonların kullanılabilmesi için System.IO.Compression kütüphanesinin projeye eklenmesi gerekmektedir.

Java entegrasyonlarında 2.39 seti ve öncesinde kullanılan sıkıştırma yöntemiyle ilgili yaşanan sıkıntılar nedeniyle 2.40.00.00 versiyonu ile birlikte sıkıştırma yöntemi değişmiştir.

Aşağıda 2.39 ve öncesi setlerde kullanılan yöntem ile 2.40 ve sonrasında kullanılan yöntemleri görebilirsiniz.

 

2.39 ve öncesinde kullanılan yöntem
  internal static class StringCompressor
        {
            public static string CompressString(string text)
            {
                byte[] buffer = Encoding.UTF8.GetBytes(text);
                var memoryStream = new MemoryStream();
                using (var gZipStream = new GZipStream(memoryStream, CompressionMode.Compress, true))
                {
                    gZipStream.Write(buffer, 0, buffer.Length);
                }
 
                memoryStream.Position = 0;
 
                var compressedData = new byte[memoryStream.Length];
                memoryStream.Read(compressedData, 0, compressedData.Length);
 
                var gZipBuffer = new byte[compressedData.Length + 4];
                Buffer.BlockCopy(compressedData, 0, gZipBuffer, 4, compressedData.Length);
                Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gZipBuffer, 0, 4);
                return Convert.ToBase64String(gZipBuffer);
            }
 
            public static string DecompressString(string compressedText)
            {
                byte[] gZipBuffer = Convert.FromBase64String(compressedText);
                using (var memoryStream = new MemoryStream())
                {
                    int dataLength = BitConverter.ToInt32(gZipBuffer, 0);
                    memoryStream.Write(gZipBuffer, 4, gZipBuffer.Length - 4);
 
                    var buffer = new byte[dataLength];
 
                    memoryStream.Position = 0;
                    using (var gZipStream = new GZipStream(memoryStream, CompressionMode.Decompress))
                    {
                        gZipStream.Read(buffer, 0, buffer.Length);
                    }
 
                    return Encoding.UTF8.GetString(buffer);
                }
            }
        }
 
2.40 ve sonrasında kullanılan yöntem
      internal static class StringCompressor
        {
            private static void CopyTo(Stream src, Stream dest)
            {
                byte[] bytes = new byte[4096];
                int cnt;
                while ((cnt = src.Read(bytes, 0, bytes.Length)) != 0)
                {
                    dest.Write(bytes, 0, cnt);
                }
            }
            public static byte[] Zip(string str)
            {
                var bytes = Encoding.UTF8.GetBytes(str);
                using (var msi = new MemoryStream(bytes))
                using (var mso = new MemoryStream())
                {
                    using (var gs = new GZipStream(mso, CompressionMode.Compress))
                    {
                         CopyTo(msi, gs);
                    }
                    return mso.ToArray();
                }
            }
            public static string Unzip(byte[] bytes)
            {
                using (var msi = new MemoryStream(bytes))
                using (var mso = new MemoryStream())
                {
                    using (var gs = new GZipStream(msi, CompressionMode.Decompress))
                    {
                        CopyTo(gs, mso);
                    }
                    return Encoding.UTF8.GetString(mso.ToArray());
                }
            }
            // Base64
            public static string ZipBase64(string compress)
            {
                var bytes = Zip(compress);
                var encoded = Convert.ToBase64String(bytes, Base64FormattingOptions.None);
                return encoded;
            }
            public static string UnzipBase64(string compressRequest)
            {
                var bytes = Convert.FromBase64String(compressRequest);
                var unziped = Unzip(bytes);
                return unziped;
            }
        }

Telif HakkıKullanım KoşullarıGizlilik
Copyright © 2018 Logo Yazılım