У меня есть служба WCF, которая может принимать byte[]
. Я создаю клиента с помощью HttpClient
и получаю следующую ошибку. Я читал в Интернете, что вы должны установить readerQuotas
как на сервере, так и на клиенте, но как мне установить эти настройки на HttpClient
?
Ошибка:
Произошла ошибка десериализации объекта типа RTM.API.Resources.UGCRequest. Квота максимальной длины массива (16384) или максимальное количество элементов в квоте графа объектов превышены при чтении данных XML. Эти квоты можно увеличить, изменив свойство MaxArrayLength в XmlDictionaryReaderQuotas или параметр MaxItemsInObjectGraph.
Конфигурация сервера:
<standardEndpoints>
<webHttpEndpoint>
<standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true" maxReceivedMessageSize="2147483647" maxBufferPoolSize="2147483647" maxBufferSize="2147483647"/>
<standardEndpoint name="DirectoryEndpoint"/>
</webHttpEndpoint>
</standardEndpoints>
<services>
<service name="API.Service.UGCService" behaviorConfiguration="DataServiceBehavior">
<endpoint contract="API.Service.UGCService" kind="webHttpEndpoint" endpointConfiguration="" binding="webHttpBinding" bindingConfiguration="BigHttpBinding"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="DataServiceBehavior">
<serviceDebug includeExceptionDetailInFaults="true"/>
<dataContractSerializer maxItemsInObjectGraph="2147483644"/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<webHttpBinding>
<binding name="BigHttpBinding" transferMode="Buffered" maxReceivedMessageSize="2147483647" >
<readerQuotas maxArrayLength="2147483647" maxDepth="2147483647" maxStringContentLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
</binding>
</webHttpBinding>
</bindings>
Код клиента:
using (HttpClient client = new HttpClient(apiPath))
{
using (HttpRequestMessage request = new HttpRequestMessage(method, finalUrl))
{
request.Headers.Accept.AddString("application/json");
request.Headers.Add("Authorization", sb.ToString());
if (method == "POST" || method == "PUT")
{
if (requestBody.Count() == 0)
request.Headers.ContentLength = 0;
else
{
request.Content = HttpContent.Create(APM6.Utils.Serialize(requestBody), "application/json");
}
}
using (HttpResponseMessage response = client.Send(request))
{
return response.Content.ReadAsString();
}
}
}