从应用程序而非 SoapUI 调用批处理服务时出现 MaxReceivedMessageSize 错误

MaxReceivedMessageSize Error when Calling Batch Service from Application but not from SoapUI

我在向 Web 服务发送请求时遇到了一个非常烦人的问题。

请求消息的参数之一是Batch,可以设置为YN。当我将其设置为 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 在 运行 代码之后确实增加了),服务(不是由我托管)告诉我消息已被收集(这确实有意义,因为消息似乎只有在到达我的系统后才会被阻止)。

此外,当我使用 xml 从 SoapUI 应用程序执行完全相同的请求时,我确实收到了一个没有任何问题的批处理响应,并且我可以看到一长串所有可用订单.

那么这个 MaxReceivedMessageSize 属性 只适用于我的应用程序而不适用于整个系统吗?如果是这样,为什么上面的代码不能解决这个问题?

在查看了 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 需要绑定到请求本身。希望这对其他人有帮助。