В соответствии с ответом 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)
Если Вы используете IIS7, смотрите на Модуль Сжатия . Это позволяет Вам настраивать сжатие для Запросов HTTP к Вашему серверу.
Сжатие WS для WCF позволяет Вам настраивать сжатие на привязке.
Видят Сжатие WS для WCF Pablo M. Cibraro
, С другой стороны, Образец кодера Microsofts GZip попытки , который "создает канал кодера, который использует Систему. IO.Compression. Класс GZipStream для сжатия выхода WCF обменивается сообщениями"
Я не видел собственный путь к 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);
Разработанный хорошо для меня.
Следует также отметить, что вам может понадобиться добавить тип mime в applicationHost.config
в разделе
в дополнение к включению сжатия для сайта:
<add mimeType="application/soap+msbin1" enabled="true" />
Если некоторые динамические ответы не сжимаются (а некоторые сжимаются), это может быть проблемой типа mime. Используйте Fiddler, чтобы получить специфику, связанную с запросом. Трассировка неудачных запросов может быть полезна для определения того, пытается ли IIS вообще сжать ответ. Если сжатие настроено правильно, вы увидите NO_MATCHING_CONTENT_TYPE
в разделе complete trace вывода трассировки.