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

时间:2017-01-21 07:35:53

标签: c# web-services wsdl soapui maxreceivedmessagesize

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

请求消息的一个参数是Batch,可以设置为YN。当我将其设置为N时,没有问题,我收到包含单个订单详细信息的回复。

但是,当我将Batch设置为Y时,我会看到此错误:

  

其他信息:已超出传入邮件的最大邮件大小限额(65536)。要增加配额,请在相应的绑定元素上使用MaxReceivedMessageSize属性。

要解决此问题,我在调用服务之前尝试设置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属性只适用于我的应用程序,而不适用于整个系统吗?如果是这种情况,为什么上面的代码不解决这个问题?

1 个答案:

答案 0 :(得分: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需要绑定来请求自己。希望这有助于其他人。