2014-02-13 35 views
0

MaxRecievedMessageSize我托管一个WCF REST服务并使用相同的webrole。配置在代码隐藏中完成。我已经尝试了这么多的解决方案,并在此发布,无法覆盖从后面的代码

但我无法弄清楚为什么我无法覆盖MaxRecievedMessageSize。如果大小超过64kb。它抛出异常。

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中

<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> 

回答

0

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

尝试创建绑定,并将其传递到WebChannelFactory<T>构造重载之一,像这样:

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<TChannel> Constructor (Binding, Uri)