在GZIP流坏CRC32(Bad CRC32 in GZIP stream)

2019-10-20 04:30发布

我使用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

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

这是一个已经在2010年DevForce任何新版本的已解决的问题?

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

或者这将是正确的解决方案?

Answer 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压缩来压缩发送到客户端来帮助数据。



Answer 2:

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



Answer 3:

谢谢金·约翰逊,

我看过的样品,我觉得不舒服添加这些配置文件,并可能打破现在的东西工作正常。

如果我去的代码的方式,我会巧妙地关闭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);
  }
}


文章来源: Bad CRC32 in GZIP stream