0

我有以下网络方法

public List<ExtractDistribution> GetExtractsRecipients(String settlementDate, bool automatic)

ExtractDistribution类是这样定义的

public class ExtractDistribution
    {
        public bool selected;
        public string account ;
        public string email ;
        public string PDFfileName ;
        public string PDFpassword ;
        public DateTime reportDate;
        public int sendStatus ;
        public string sendStatusDesc ;
        public DateTime sendStatusDate ;
        public string parameters ;
        public string extensions ;
}

我需要将绑定中的maxReceivedMessageSize设置为哪个值,以允许 Web 方法GetExtractsRecipients列表中最多包含 2000 个项目

计算是如何进行的?

4

2 回答 2

0

这是一个粗略的估计。假设字符串使用 ASCII/UTF8 编码:

bool selected - 1 byte
string account - 100 bytes
string email - 100 bytes
string PDFfileName - 100 bytes
string PDFpassword - 100 bytes
DateTime reportDate - 8 bytes
int sendStatus - 4 bytes
string sendStatusDesc - 100 bytes
DateTime sendStatusDate - 8 bytes
string parameters - 100 bytes
string extensions - 100 bytes
Total - 721 bytes

因此,对于这么多对象,您将需要 721 * 2000 或 1442000 字节(~1442 kb)。但是,这并没有考虑到邮件的信封。如果您使用的是 soap,它将明显比使用 JSON 信封大。

考虑到范围,假设您的 2000 条记录大约为 2 mb (2048 kb) 可能是安全的。

编辑:我的想法有点草率。在这种情况下,SOAP 信封不应比 JSON 信封大得多。但是,如果您必须考虑非英语字符,那么每个字符串的大小可以达到 400 字节,这将显着增加您的总消息大小。希望这个答案解释了决定使用什么尺寸的过程,并且您可以考虑到有关您的情况的所有小细节。

于 2013-08-20T17:08:19.497 回答
0

将 maxReceivedMessageSize 设置为最大值!(long.Max)

这就是秘密:这并不会真正花费你任何东西。此设置用于保护您免受 DOS 附加,其中有人会发送非常大的请求并且您的服务将开始阻塞。您还有其他方法可以解决此问题,例如添加身份验证。无论如何,此设置并非无用,它确实降低了某种风险(即使在身份验证的情况下),但取决于您的应用程序的使用方式以及这可能不是相关风险。

于 2013-08-20T19:43:51.713 回答