【问题标题】:MaxReceivedMessageSize Error when Calling Batch Service from Application but not from SoapUI从应用程序而不是从 SoapUI 调用批处理服务时出现 MaxReceivedMessageSize 错误
【发布时间】:2017-01-21 07:35:52
【问题描述】:

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

【问题讨论】:

    标签: c# web-services wsdl soapui maxreceivedmessagesize


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2014-03-24
      • 1970-01-01
      • 1970-01-01
      • 2014-04-27
      • 2020-10-24
      • 2012-04-15
      • 1970-01-01
      • 1970-01-01
      • 2010-10-28
      相关资源
      最近更新 更多