已超出传入邮件的最大邮件大小限额(65536)。 Silverlight + WCF

时间:2014-01-23 00:23:24

标签: c# wcf silverlight wcf-endpoint

我正在寻找一整天来解决我的问题(也在StackOverflow上),但不幸的是没有任何效果。我仍然收到错误:

“已超出传入邮件的最大邮件大小限额(65536)。要增加配额,请在相应的绑定元素上使用MaxReceivedMessageSize属性。”

有数百种解决方案,但基于项目中的.config文件。我有一个WCF服务和Silverlight客户端。它们之间的绑定仅以编程方式设置。

以下是WCF服务配置的块代码:

private ServiceHostBase CreateService(Uri baseAddress)
    {
        var serviceHost = new ServiceHost(typeof(MyService), new[] { baseAddress });
        var endPointWithoutSSL = new BasicHttpBinding()
        {
            MaxBufferSize = int.MaxValue,
            MaxReceivedMessageSize = int.MaxValue,
            MaxBufferPoolSize = int.MaxValue,
        };

        serviceHost.AddServiceEndpoint(typeof(MyService), endPointWithoutSSL,                                       baseAddress.ToString());
        return serviceHost;
    }

在Silverlight项目中,客户端端点的配置如下所示:

private BasicHttpBinding GetBinding()
    {
        var securityMode = GetSecurityMode();
        var binding = new BasicHttpBinding(securityMode)
        {
            SendTimeout = TimeSpan.FromMinutes(10),
            OpenTimeout = TimeSpan.FromMinutes(10),
            CloseTimeout = TimeSpan.FromMinutes(10),
            ReceiveTimeout = TimeSpan.FromMinutes(10),
            TextEncoding = Encoding.UTF8,
            TransferMode = TransferMode.Buffered,
            MaxReceivedMessageSize = int.MaxValue,
            MaxBufferSize = int.MaxValue,
        };

        return binding;
    }

无论我怎么努力,MaxReceivedMessageSize都会从客户端设置为65k。 Microsoft WCF跟踪工具显示,在抛出超过最大收到邮件大小的异常后。

更有趣的是,在端点中启用BasicHttpSecurityMode.Transport不会导致此错误。 但是,我必须在没有BasicHttpSecurityMode.Transport选项的情况下设置我的端点。

任何帮助都将不胜感激。

由于

1 个答案:

答案 0 :(得分:1)

在WCF方面尝试下面的代码,它应该可以工作。

    private ServiceHostBase CreateService(Uri baseAddress)
    {
        var serviceHost = new ServiceHost(typeof(MyService), new[] { baseAddress });
        var endPointWithoutSSL = new BasicHttpBinding()
        {
            MaxBufferSize = int.MaxValue,
            MaxReceivedMessageSize = int.MaxValue,
            MaxBufferPoolSize = int.MaxValue,
        };

        endPointWithoutSSL.ReaderQuotas.MaxStringContentLength = int.MaxValue;
        endPointWithoutSSL.ReaderQuotas.MaxNameTableCharCount = int.MaxValue;
        endPointWithoutSSL.ReaderQuotas.MaxDepth = int.MaxValue;
        endPointWithoutSSL.ReaderQuotas.MaxBytesPerRead = int.MaxValue;
        endPointWithoutSSL.ReaderQuotas.MaxArrayLength = int.MaxValue;

        serviceHost.AddServiceEndpoint(typeof(MyService), endPointWithoutSSL, baseAddress.ToString());
        return serviceHost;
    }