我主持一个WCF REST系列,并在同一个webrole中使用它。配置是在代码隐藏中完成的。我已经尝试过这么多的解决方案并发了这个帖子,
但是我无法理解为什么我不能覆盖MaxRecievedMessageSize。如果大小超过64 if。它抛出了异常。
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>发布于 2014-02-13 19:59:42
我不相信在创建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 Constructor (Binding, Uri)。
https://stackoverflow.com/questions/21761246
复制相似问题