이것은 특성이 아니지만 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");
}
}
}
[편집] 해결하기 위해 의견 :이 응답에 속성을 설정으로
는 단순히 웹 서비스 작업의 본문에 어디서나 전화 :
[OperationContract]
public ReturnType GetInformation(...) {
// do some stuff
CompressResponseStream();
}
흥미로운 질문입니다. 왜 선택적이어야합니까? 그냥 궁금해서. gzip 압축은 HTTP를 사용하는 거의 모든 장치에서 지원되는 표준이라고 생각했기 때문에 호스팅 된 WCF 서비스는 IIS 구성 수준에서 수행합니다. – Scen
텔넷을 통해 서비스를 테스트하는 것이 더 쉽습니다. 또한 제 3 자 클라이언트가 압축을 처리하는 것이 쉬운 지 잘 모르겠습니다. – rekire
아, 당신은 WCF http 서비스를 테스트하기 위해 Fiddler (http://www.fiddler2.com/fiddler2/)를 시도 할 수 있습니다. 그것은 굉장. 아직 gzip을 자동으로 압축 해제하지 않는 장치에서 실행되지는 않았지만 모든 타사 클라이언트가이를 처리 할 수 있는지 확실하게 말할 수는 없습니다. – Scen