2010-04-29 30 views
1

在客户端获得Web请求的完整有效负载之前,我们首先要发送一个测量它将得到的响应的大小。如果响应过大,客户端会向用户显示一条消息,让他们选择中止操作。是否有内置的方式来确定WCF响应的大小?

我们可以编写一些自定义代码来预先载入服务器上的响应,确定大小,然后将它传递给客户端,但是如果还有其他方法可以执行,我们宁愿不要。

有谁知道如果WCF有任何棘手的方式来做到这一点?或者是否有免费的第三方工具可以实现这一目标?

谢谢。

回答

0

我不认为在WCF或.NET框架中有什么“棘手”的问题来做到这一点,真的。你传递给客户的是什么?一个类的实例?

你可以做的是运行查询,或者你获取响应,然后将其序列化到内存流中,看看它有多大。这不会是一个完全准确的大小 - SOAP消息有一些额外的开销,比如SOAP信封和头文件等等,但它可以让你知道你是要返回几百字节还是一个字节几兆字节。

问题是:服务器上可能需要一段时间才能进行汇编/查询,然后再实际“测量”。此外,你几乎必须有两个调用 - 一个是“MeasureResult”,它返回一个Int或Long或其他东西,然后第二个调用“GetResult”来实际得到结果。所以你会花费这样的努力来组装消息两次....

我真的没有一个很好的答案给你,但也许你只需要找出一些其他方式来让客户端中止如果时间太长,请致电。或者找到一种方法来更快速地找出一个指标,说明响应的大小(没有获得响应本身的所有细节)。

+0

所有的都是很好的建议。我们最终完全避免了这个问题,并且只要数据下载花费了n秒以上,就会在用户界面上向用户弹出一条消息。不是最强大的解决方案,但显然要比编写一大堆服务器端代码容易得多,这些代码会进一步减慢进程速度,并最终提供近似值。 – jaminto 2010-12-10 23:44:23

相关问题