GZIP流中的CRC32错误

时间:2014-05-26 10:32:03

标签: silverlight-4.0 devforce

我正在使用DevForce 2010和Silverlight 4。

保存包含大量二进制数据的实体时,出现此错误:

Unhandled Error in Silverlight Application The remote server returned an error: NotFound.

在调试应用程序时,我看到了这些错误:

Unhandled Error in Silverlight Application Insufficient memory to continue the execution of the program.

Bad CRC32 in GZIP stream.

我在Ideablades论坛上找到了讨论问题的这个帖子:http://www.ideablade.com/forum/forum_posts.asp?TID=3361&PN=1&title=bad-crc32-in-gzip-stream

这是服务器或客户端的问题吗?

这是在任何新版DevForce 2010中已解决的问题吗?

我的服务器有4 GB内存。增加内存会解决问题吗?

或者什么是正确的解决方案?

3 个答案:

答案 0 :(得分:1)

是的,客户端和服务器上的OnEndpointCreated覆盖是您应该添加自定义的位置。您可以添加以下内容以从绑定中删除GZIP:

public override void OnEndpointCreated(System.ServiceModel.Description.ServiceEndpoint endpoint)
{
    if (endpoint.Binding is CustomBinding)
    {
        var binding = endpoint.Binding as CustomBinding;
        var elements = binding.CreateBindingElements();

        // Swap out existing (GZIP) message encoding for binary
        var encoding = elements.Find<MessageEncodingBindingElement>();
        if (encoding != null)
        {
            elements.Remove(encoding);

            encoding = new BinaryMessageEncodingBindingElement();
            elements.Insert(0, encoding);
            endpoint.Binding = new CustomBinding(elements);
        }
    }
}

如果他们在客户端/服务器上探测到的程序集中,DevForce会找到你的类。

这将关闭从DevForce客户端到EntityServer的所有内容的压缩,因此可能有点笨拙。您可以打开IIS compression来压缩发送给客户端的数据以提供帮助。

答案 1 :(得分:0)

自DevForce 2010的6.1.7发布以来,GZIP处理没有任何变化。该线程仍然包含如何解决问题的最佳信息:1)修改保存逻辑或实体定义以减少保存的数据量; 2)关闭GZIP的使用;或者3)用另一个压缩库编写自定义消息编码器。

答案 2 :(得分:0)

谢谢Kim Johnson,

我查看了这些示例,我觉得添加这些配置文件并且可能会破坏今天运行正常的内容会感到不舒服。

如果我采用代码方式,我是否会干掉GZIP并仍保留DevForce的其余默认设置?

我想下面的代码是我应该去的地方?

如果我在客户端和服务器上保存这些类,DevForce会自动找到这些类吗?

//Client

using System.ServiceModel.Channels;
using IdeaBlade.Core.Wcf.Extensions;

public class ProxyEvents  : IdeaBlade.EntityModel.ServiceProxyEvents {

  public override void OnEndpointCreated(System.ServiceModel.Description.ServiceEndpoint endpoint) {
    base.OnEndpointCreated(endpoint);
    // My client code turning GZIP off comes here?
  }
  public override void OnFactoryCreated(System.ServiceModel.ChannelFactory factory) {
    base.OnFactoryCreated(factory);
  }
}

//Server
using System.ServiceModel.Channels;
using IdeaBlade.Core.Wcf.Extensions;

public class ServiceEvents : IdeaBlade.EntityModel.Server.ServiceHostEvents {

  public override void OnEndpointCreated(System.ServiceModel.Description.ServiceEndpoint endpoint) {
    base.OnEndpointCreated(endpoint);
    // My server code turning GZIP off comes here?
  }
  public override void OnServiceHostCreated(System.ServiceModel.ServiceHost host) {
    base.OnServiceHostCreated(host);
  }
}