這不是一個屬性,但它是壓縮WCF服務響應的基本代碼,並且如果需要可以封裝到屬性中。
public static void CompressResponseStream(HttpContext context = null)
{
if (context == null)
context = HttpContext.Current;
string encodings = context.Request.Headers.Get("Accept-Encoding");
if (!string.IsNullOrEmpty(encodings))
{
encodings = encodings.ToLowerInvariant();
if (encodings.Contains("deflate"))
{
context.Response.Filter = new DeflateStream(context.Response.Filter, CompressionMode.Compress);
context.Response.AppendHeader("Content-Encoding", "deflate");
context.Response.AppendHeader("X-CompressResponseStream", "deflate");
}
else if (encodings.Contains("gzip"))
{
context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
context.Response.AppendHeader("Content-Encoding", "gzip");
context.Response.AppendHeader("X-CompressResponseStream", "gzip");
}
else
{
context.Response.AppendHeader("X-CompressResponseStream", "no-known-accept");
}
}
}
[編輯],以解決意見:
只要任何地方調用它在你的Web服務操作的主體,因爲它設置了響應性能:
[OperationContract]
public ReturnType GetInformation(...) {
// do some stuff
CompressResponseStream();
}
有趣的問題。爲什麼它必須是可選的?只是好奇。我認爲gzip壓縮是幾乎所有使用http的設備都支持的標準,因此我託管的WCF服務在IIS配置級別執行。 – Scen 2012-07-24 16:18:14
這將是很好的,所以通過telnet測試服務更容易。另外我不確定第三方客戶端是否容易處理壓縮。 – rekire 2012-07-24 16:21:55
啊,你可能想試試Fiddler(http://www.fiddler2.com/fiddler2/)來測試你的WCF http服務。這很棒。我還沒有運行過不會自動解壓縮gzip的設備,但我想我不能肯定地說所有第三方客戶端都可以處理它。 – Scen 2012-07-24 16:25:10