Что самый легкий путь состоит в том, чтобы добавить сжатие к WCF в Silverlight?

В соответствии с ответом rmn:

Некоторые, где в вашей инициализации вашего проекта добавьте метод unique_join к объекту sqlalchemy.orm.Query следующим образом:

def unique_join(self, *props, **kwargs):
    if props[0] in [c.entity for c in self._join_entities]:
        return self
    return self.join(*props, **kwargs)

Query.unique_join = unique_join

Теперь используйте query.unique_join вместо query.join:

query = query.unique_join(Tag)
24
задан Drew Noakes 8 July 2009 в 07:18
поделиться

4 ответа

Если Вы используете IIS7, смотрите на Модуль Сжатия . Это позволяет Вам настраивать сжатие для Запросов HTTP к Вашему серверу.

10
ответ дан Lance Fisher 28 November 2019 в 23:49
поделиться

Сжатие WS для WCF позволяет Вам настраивать сжатие на привязке.

Видят Сжатие WS для WCF Pablo M. Cibraro

, С другой стороны, Образец кодера Microsofts GZip попытки , который "создает канал кодера, который использует Систему. IO.Compression. Класс GZipStream для сжатия выхода WCF обменивается сообщениями"

12
ответ дан Mike Guthrie 28 November 2019 в 23:49
поделиться

Я не видел собственный путь к WCF, чтобы сделать сжатие при выполнении проекта WCF недавно. Я просто использовал Систему. Пространство имен IO.Compression и сделанный быстрым компрессором. Вот код, который я использовал

public static class CompressedSerializer
{
    /// <summary>
    /// Decompresses the specified compressed data.
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="compressedData">The compressed data.</param>
    /// <returns></returns>
    public static T Decompress<T>(byte[] compressedData) where T : class
    {
        T result = null;
        using (MemoryStream memory = new MemoryStream())
        {
            memory.Write(compressedData, 0, compressedData.Length);
            memory.Position = 0L;

            using (GZipStream zip= new GZipStream(memory, CompressionMode.Decompress, true))
            {
                zip.Flush();
                var formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
                result = formatter.Deserialize(zip) as T;
            }
        }

        return result;
    }

    /// <summary>
    /// Compresses the specified data.
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="data">The data.</param>
    /// <returns></returns>
    public static byte[] Compress<T>(T data)
    {
        byte[] result = null;
        using (MemoryStream memory = new MemoryStream())
        {
            using (GZipStream zip= new GZipStream(memory, CompressionMode.Compress, true))
            {
                var formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
                formatter.Serialize(zip, data);
            }

            result = memory.ToArray();
        }

        return result;
    }
}

тогда, я просто сделал, чтобы мои сервисы взяли в массиве байтов как вход, как такой

void ReceiveData(byte[] data);

Разработанный хорошо для меня.

11
ответ дан Darren Kopp 28 November 2019 в 23:49
поделиться

Следует также отметить, что вам может понадобиться добавить тип mime в applicationHost.config в разделе в дополнение к включению сжатия для сайта:

<add mimeType="application/soap+msbin1" enabled="true" />

Если некоторые динамические ответы не сжимаются (а некоторые сжимаются), это может быть проблемой типа mime. Используйте Fiddler, чтобы получить специфику, связанную с запросом. Трассировка неудачных запросов может быть полезна для определения того, пытается ли IIS вообще сжать ответ. Если сжатие настроено правильно, вы увидите NO_MATCHING_CONTENT_TYPE в разделе complete trace вывода трассировки.

3
ответ дан 28 November 2019 в 23:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: