2017-01-21 2 views
2

У меня очень неприятная проблема при отправке запроса в веб-службу.Ошибка MaxReceivedMessageSize при вызове пакетного обслуживания из приложения, но не из SoapUI

Одним из параметров сообщения запроса является Batch, который может быть установлен либо Y, либо N. Когда я устанавливаю это на N, проблем нет, и я получаю ответ, содержащий детали для одного заказа.

Однако, когда я установил Batch к Y, я вижу эту ошибку:

Additional information: The maximum message size quota for incoming messages (65536) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.

Чтобы решить эту проблему, я попытался установить MaxReceivedMessageSize перед вызовом службы:

public Provider.GetMessageResponse GetOrders(bool acceptBatch) 
{ 
    var httpBinding = new BasicHttpBinding(); 
    httpBinding.MaxReceivedMessageSize = 2097152; 
    httpBinding.MaxBufferSize = 2097152; 

    var request = BuildRequest(acceptBatch); 
    var client = new Provider.PullServiceClient(); 
    var response = client.PullGetMessage(SecurityToken, request); 
    return response; 
} 

Однако, я до сих пор см. сообщение об ошибке (хотя я вижу, что httpBinding.MaxReceivedMessageSize действительно был увеличен после запуска этого кода), а служба (не размещенная мной) сообщает мне, что сообщения были собраны (что имеет смысл, поскольку кажется, что сообщения только блокируются, когда они достигают моей системы).

Кроме того, когда я выполняю тот же запрос из приложения SoapUI с использованием xml, я получаю пакетный ответ без каких-либо проблем, и я могу видеть длинный список всех доступных заказов.

Значит, это свойство MaxReceivedMessageSize распространяется только на мое приложение, а не на всю систему? Если это так, почему код выше не разрешает это?

ответ

0

Посмотрев на то, что перегружены конструкторы Были для Provider.PullServiceClient, мне удалось решить эту проблему, в том числе следующих параметров:

var binding = new BasicHttpBinding() { MaxReceivedMessageSize = 2097152, MaxBufferSize = 2097152 }; 
var endpoint = new EndpointAddress("http://test.providerporal.co.za/testservice/pullservice.svc"); 

var client = new Provider.PullServiceClient(binding, endpoint); 

Так что я предполагаю, что это предел какой-то образом связан с моим приложением, но HttpBinding необходимого быть обязанным запросить себя. Надеюсь, это поможет кому-то другому.

Смежные вопросы