向Web服务发送请求时,我遇到了一个非常烦人的问题。
请求消息的一个参数是Batch
,可以设置为Y
或N
。当我将其设置为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
属性只适用于我的应用程序,而不适用于整个系统吗?如果是这种情况,为什么上面的代码不解决这个问题?
答案 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
需要绑定来请求自己。希望这有助于其他人。