2014-02-13 31 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)