Боже, не любите ли вы WCF.
Я прочитал все возможные темы, но сейчас я действительно застрял.
Вот конфигурация WCF:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BaseHttp"
maxBufferSize="4194304"
maxBufferPoolSize="4194304"
maxReceivedMessageSize="4194304" />
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="TaskServiceBehavior">
<serviceMetadata httpGetEnabled="True" />
<serviceDebug includeExceptionDetailInFaults="True" />
</behavior>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="TaskServiceBehavior" name="TaskService">
<endpoint
address="http://www.mysite.com/TableTaskService/TableTaskService.svc"
binding="basicHttpBinding" bindingConfiguration="BaseHttp"
contract="TableTaskService.ITableTaskService" />
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://www.mysite.com/TableTaskService/" />
</baseAddresses>
</host>
</service>
</services>
<serviceHostingEnvironment>
<baseAddressPrefixFilters>
<add prefix="http://www.mysite.com/" />
</baseAddressPrefixFilters>
</serviceHostingEnvironment>
</system.serviceModel>
Теперь я отправляю сообщение и получаю это исключение по умолчанию (см. Файл svclog):
Превышена квота максимального размера сообщения для входящих сообщений (65536).Чтобы увеличить квоту, используйте свойство MaxReceivedMessageSize для соответствующего элемента привязки.
Теперь я четко заявляю, что оно должно быть 4 МБ.
Мой код клиента:
TableTaskServiceClient client =
new TableTaskServiceClient(
new BasicHttpBinding { MaxBufferSize = 4194304,
MaxReceivedMessageSize = 4194304 },
new EndpointAddress(GetEndpointAddressString())
);
И все же он выдает мне ошибку размера 65536.Откуда это происходит? ..
Также ДЕЙСТВИТЕЛЬНО имеет значение, что клиент устанавливает MaxReceivedMessageSize
в то же значение, что и сервер?Я думаю, что было бы логично, чтобы за определение длины отвечал сервер, а не клиент.
Есть также это предупреждение (обратите внимание, насколько полезно это в том, что он говорит, то есть: нет информации об элементе, который переопределяется илия что-то упустил), может быть, basichttpbinding именно то, что переопределяется?но с чего бы это?в любом случае:
[TraceRecord] Предупреждение о серьезности TraceIdentifier http://msdn.microsoft.com/en-US/library/System.ServiceModel.OverridingDuplicateConfigurationKey.aspx Описание Система конфигурации обнаружила дубликат ключа в другой области конфигурации и переопределяет более свежее значение.AppDomain / LM / W3SVC / 11 / ROOT / TableTaskService-33-1296567 Исходная система.ServiceModel.Configuration.ServiceBehaviorElementCollection / -851144413 Поведение ElementName OldElementLineNumber 0 NewElementLineNumber 0
* 10D *: 10: * и 1030 *: конфигурация клиента: *1029*
: 1030 *: 1030 *: для настройки клиента 10 * и 1030 *: 1030 *: 1030 * клиент 10: * и 1030 *: конфигурация клиента: *1029* * 10
TableTaskServiceClient client = new TableTaskServiceClient(
new BasicHttpBinding {
MaxBufferSize = 4194304,
MaxReceivedMessageSize = 4194304,
MaxBufferPoolSize=4194304,
ReaderQuotas = new XmlDictionaryReaderQuotas
{
MaxArrayLength = 4194304,
MaxBytesPerRead = 4194304,
MaxDepth = 4194304,
MaxNameTableCharCount = 4194304,
MaxStringContentLength = 4194304
}
}, new EndpointAddress(GetEndpointAddressString()));
Та же ошибка все еще.
Если это представляет какой-то интерес, я отправляю массив byte [] длиной 467000 ~