gpt4 book ai didi

wcf - .NET 4.5 和 WCF 请求压缩

转载 作者:行者123 更新时间:2023-12-01 06:37:27 25 4
gpt4 key购买 nike

我们有一个托管在第三方托管环境中的 Web 应用程序。服务器应用程序向我们的 iPad 应用程序公开了一些 WCF RESTFUL 服务。

WCF 服务是 .svc-less 并在 Glonbal.asax 文件中注册。样本:

 RouteTable.Routes.Add("service name", new ServiceRoute("url", 
new WebServiceHostFactory(), routingServiceContract));

由于我们需要将一些海量数据从 iPad 应用程序传输到服务器应用程序,因此一些请求在发送到 WCF 服务之前经过 GZIP 压缩。由于服务器应用程序最初是基于 .NET 3.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 4.5。然后压缩的 JSON 请求开始失败(我们得到 http 400 或有时 500 错误)。经过如此多的调查,结果证明代码和 web.config 文件都没有问题,因为 WCF 服务在没有安装 .NET 4.5 的服务器上完美运行。

我什至评论了上面的代码并发布到同一个服务器,但它再次不起作用。我原以为请求被解码了两次!

现在我想知道如何利用 WCF 4.5 内置压缩功能并使该网站正常工作?我更喜欢摆脱自定义 c# 代码而只使用 WCF 4.5 压缩功能。

附言Web 服务正在 ASP.NET 兼容模式下运行。

pps如果我们不压缩 http 请求,Web 服务就可以完美运行。

最佳答案

我检查了您的配置文件和 Application_BeginRequest 方法。我用 .net 4.0 在我的机器上复制了你的配置文件,并验证它工作正常。我还可以看到相同的设置在具有 .net 4.5 的机器上失败。根据我的观察,您的问题与 Application_BeginRequest 中的压缩/解压缩代码无关。但是您遇到了我在 [post][1] 中描述的相同问题

[1]:WCF - Conflicting endpoints after .Net 4.5 installation “邮政”。在这篇文章中,我还发布了解决此问题的方法。解决方法是明确定义 REST 端点。在遵循相同的工作之后,我可以看到您的项目开始工作。准确地说,让您的项目正常工作所需要做的就是在配置中添加这两行并显式配置服务端点。

    <services>
<service name="<YourNamespace>.TestService">
<endpoint address="" binding="webHttpBinding" contract="<YourNamespace>.TestService" behaviorConfiguration="RESTEndpointBehavior"/>
</service>
</services>

你能检查一下这是否能解决你的问题吗?

关于wcf - .NET 4.5 和 WCF 请求压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13619253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com