如何提高调用Web服务的Excel UDF的性能?

我们正在开发一种c#for Excel的股票查找UDF。 我们的UDF最终会调用一个Web服务,如果表单有1000个调用我们的Web服务的话,那么这个Web服务可能会非常慢。

我注意到Excel 2010引入了asynchronousUDF来帮助这个http://msdn.microsoft.com/en-us/library/ff955606.aspx#odc_office14_ta_WhatsNewforOffice2010Developers_Excel2010

有没有人试过这个,并有任何C#的例子,或有任何其他提示在Excel中提高Web服务typesUDF的性能?

每当我遇到这样的问题,我总是决定采取不同的方法来解决问题。

在这种情况下,如果有任何方法,你可以批量打电话,只是做一个webservice电话那么这将是最好的事情,因为你只有一个往返而不是1000或其他。

换句话说,你可以遍历1000个单元格,并build立一个(相当大的)请求发送到Web服务和一次检索所有的信息? 然后在返回时将其全部解压。

如果这是你自己的web服务(我希望是,因为你说我们的 web服务),那么你应该能够修改它来做到这一点。 如果您正在调用没有批处理function的外部Web服务,那么恐怕我不确定如何最好地处理它,除了在单独的线程上激发大量asynchronousUDF。

您可以使用Excel RTD提供asynchronous数据检索。 RTD允许您按需将更新推送到Excel,这意味着您可以从UDF调用中快速返回,并在后台asynchronous检索数据。 请求完成后,您将通知Excel更新的值可用。 您也可以轻松地将多个UDF调用分批到单个Web服务请求中,方法是在RTD主题到达时简单地排队,并定期形成批量请求。

这是一个链接,介绍如何在C#中创build一个基本的RTD服务器。 为使解决scheme更加用户友好,可以将RTD工作表函数调用包装在UDF中。