首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从代码后面重写MaxRecievedMessageSize

无法从代码后面重写MaxRecievedMessageSize
EN

Stack Overflow用户
提问于 2014-02-13 17:26:52
回答 1查看 117关注 0票数 0

我主持一个WCF REST系列,并在同一个webrole中使用它。配置是在代码隐藏中完成的。我已经尝试过这么多的解决方案并发了这个帖子,

但是我无法理解为什么我不能覆盖MaxRecievedMessageSize。如果大小超过64 if。它抛出了异常。

代码语言:javascript
复制
WebChannelFactory<X> channelFactory;

                if (!ChannelFactories.ContainsKey(endpointName.ToString(CultureInfo.InvariantCulture)))
                {
                    channelFactory = new WebChannelFactory<X>(new Uri(endpointName));

                    lock (ChannelFactories.SyncRoot)
                    {
                        ChannelFactories[endpointName.ToString(CultureInfo.InvariantCulture)] = channelFactory;
                    }
                }
                else
                {
                    channelFactory =
                        ChannelFactories[endpointName.ToString(CultureInfo.InvariantCulture)] as
                        WebChannelFactory<X>;
                }
                //Configure The Size here

                if (channelFactory != null)
                {

                    channelFactory.Endpoint.Binding = new WebHttpBinding
                        {

                            MaxReceivedMessageSize = 2147483647,
                            MaxBufferSize = 2147483647,
                            ReaderQuotas =new XmlDictionaryReaderQuotas()
                                {
                                    MaxArrayLength = 2147483647,
                                    MaxStringContentLength = 2147483647,
                                    MaxDepth = 2147483647,
                                    MaxNameTableCharCount = 2147483647,
                                    MaxBytesPerRead = 2147483647
                                },
                            MaxBufferPoolSize = 2147483647,
                            OpenTimeout = new TimeSpan(0, 0, 10, 0),
                            ReceiveTimeout = new TimeSpan(0, 0, 10, 0),
                            TransferMode = TransferMode.Streamed,
                            CloseTimeout = new TimeSpan(0, 0, 10, 0),
                            SendTimeout = new TimeSpan(0, 0, 10, 0)
                        };

和Web.Config

代码语言:javascript
复制
<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <diagnostics>
      <messageLogging logEntireMessage="true" logMessagesAtServiceLevel="false" logMessagesAtTransportLevel="false" logMalformedMessages="true" maxMessagesToLog="5000" maxSizeOfMessageToLog="2000"></messageLogging>
    </diagnostics>
    <standardEndpoints></standardEndpoints>
  </system.serviceModel>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-13 19:59:42

我不相信在创建WebChannelFactory之后,您可以更改它的绑定(但我不能100%肯定)。一旦你创建了一个工厂,几乎没有什么东西可以改变。很可能它使用的是WebHttpBinding的默认值,所以这就是为什么您要获得下限。

尝试创建绑定并将其传递给一个WebChannelFactory<T>构造函数重载,如下所示:

代码语言:javascript
复制
WebHttpBinding myBinding = new WebHttpBinding
                           {
                               MaxReceivedMessageSize = 2147483647,
                               MaxBufferSize = 2147483647,
                               ReaderQuotas =new XmlDictionaryReaderQuotas()
                               {
                                   MaxArrayLength = 2147483647,
                                   MaxStringContentLength = 2147483647,
                                   MaxDepth = 2147483647,
                                   MaxNameTableCharCount = 2147483647,
                                   MaxBytesPerRead = 2147483647
                               },
                               MaxBufferPoolSize = 2147483647,
                               OpenTimeout = new TimeSpan(0, 0, 10, 0),
                               ReceiveTimeout = new TimeSpan(0, 0, 10, 0),
                               TransferMode = TransferMode.Streamed,
                               CloseTimeout = new TimeSpan(0, 0, 10, 0),
                               SendTimeout = new TimeSpan(0, 0, 10, 0)
                           };

if (!ChannelFactories.ContainsKey(endpointName.ToString(CultureInfo.InvariantCulture)))
{

    // Pass the binding created above and the URI into the constructor
    channelFactory = new WebChannelFactory<X>(myBinding, new Uri(endpointName));

    lock (ChannelFactories.SyncRoot)
    {
        ChannelFactories[endpointName.ToString(CultureInfo.InvariantCulture)] = channelFactory;
    }
}
else
{
    channelFactory = ChannelFactories[endpointName.ToString(CultureInfo.InvariantCulture)] as WebChannelFactory<X>;
}

在上面的代码中,我使用了WebFactoryChannel<T>的重载,它接受绑定和URI - WebChannelFactory Constructor (Binding, Uri)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21761246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档