우리는 타사 호스팅 환경에서 호스팅되는 웹 응용 프로그램을 보유하고 있습니다. 서버 응용 프로그램은 일부 WCF RESTFUL 서비스를 iPad 응용 프로그램에 제공합니다..NET 4.5 및 WCF 요청 압축
WCF 서비스는 .svc-less이며 Glonbal.asax 파일에 등록됩니다. 샘플 :
RouteTable.Routes.Add("service name", new ServiceRoute("url",
new WebServiceHostFactory(), routingServiceContract));
우리는 서버 응용 프로그램에 우리의 iPad 응용 프로그램에서 일부 대용량 데이터를 전송해야하기 때문에
, 요청의 일부는 WCF 서비스로 전송되기 전에 GZIP이 압축됩니다. 우리의 호스팅 제공 업체가 서버에 .NET 4.5이 설치 될 때까지public void Application_BeginRequest(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(Request.Headers["Content-Encoding"]))
{
if (Request.Headers["Content-Encoding"].ToLower().Contains("gzip"))
Request.Filter = new GZipStream(Request.Filter, CompressionMode.Decompress);
if (Request.Headers["Content-Encoding"].ToLower().Contains("deflate"))
Request.Filter = new DeflateStream(Request.Filter, CompressionMode.Decompress);
}
}
이 일하고 : 그리고 처음에 .NET 3.5과 같은 코드의 조각을 기반으로 구축 된 서버 응용 프로그램 때문에 압축 requsts을 압축 해제를 담당하고있다 . 그런 다음 압축 된 JSON 요청이 실패하기 시작했습니다 (HTTP 400 또는 가끔 500 오류가 발생 함). WCF 서비스가 .NET 4.5가 설치되지 않은 서버에서 완벽하게 작동하기 때문에 많은 조사가 끝난 후 code 및 web.config 파일은 모두 정상입니다.
위의 코드에 주석을 달아서 같은 서버에 게시했지만 다시 작동하지 않았습니다. 요청이 두 번 해독되었다고 생각했습니다!.
이제 WCF 4.5의 내장 압축 기능을 어떻게 활용하고이 웹 사이트가 작동하는지 궁금합니다. 커스텀 C# 코드를 제거하고 WCF 4.5 압축 기능을 사용하는 것을 선호합니다.
p.s. 웹 서비스는 ASP.NET 호환성 모드에서 실행됩니다.
p.p.s. http 요청을 압축하지 않으면 웹 서비스가 완벽하게 작동합니다.
몇 가지 질문 : (1) 3.5 응용 프로그램 또는 4.0 응용 프로그램입니까? 4.5는 4.0 런타임에 대한 업데이트이므로 3.5 응용 프로그램은 4.5 설치로 영향을받지 않습니다. (2) 압축 코드에 주석을 달고 압축되지 않은 요청을 보내면 호출이 성공한 것을 볼 수 있습니까? (3) web.config와 작은 repro를 게시하여 어디에서 볼 수 있습니까? 바인딩 설정이 어떻게 표시되는지 보는 데 관심이 있습니다. – Praburaj
1- 이것은 .NET 4.0 및 ASP.NET MVC 3.0 응용 프로그램입니다. 2 - 아니, 우리가 도움이되지 않을 압축 코드에 대해 언급하면 안된다. 압축 코드를 유지하고 사이트를 만든 다음 동일한 미리 컴파일 된 웹 사이트를 .NET 4.0 (4.5가 아닌) 서버에 복사합니다. 3 - 여기서 web.config 파일을 게시하려고합니다. 큰 보스에게 허락을 요청할 필요가 있습니다. – Aref
@Praburaj - 명확히하기 위해 압축 코드가 비활성화 된 (또는 활성화 된) _uncompressed_ 요청을 보내면 예상대로 작동합니다. –