maxReceivedMessageSize

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属性仅适用于我的应用程序,而不适用于整个系统吗?如果是这样,为什么上面的代码不能解决这个问题?

最佳答案

在查看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需要绑定才能请求自己。希望这可以帮助其他人。

关于c# - 从应用程序而不是从SoapUI调用批处理服务时出现MaxReceivedMessageSize错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41776875/

10-13 08:58