C# 如何提高调用web服务的Excel UDF的性能?

C# 如何提高调用web服务的Excel UDF的性能?,c#,.net,excel,user-defined-functions,C#,.net,Excel,User Defined Functions,我们正在用c#for Excel开发一种库存查找UDF。我们的UDF最终调用了一个web服务,如果一个工作表有1000个对我们的web服务的调用,这可能会非常慢 我注意到Excel2010引入了异步UDF来帮助实现这一点 有没有人尝试过这种方法,有没有c#示例,或者有没有其他方法可以提高Excel中web服务类型UDF的性能?每当我遇到这种问题时,我总是决定用不同的方法来解决这个问题 在这种情况下,如果有任何方法可以批量调用并只进行一次webservice调用,那么这将是最好的选择,因为您只有一

我们正在用c#for Excel开发一种库存查找UDF。我们的UDF最终调用了一个web服务,如果一个工作表有1000个对我们的web服务的调用,这可能会非常慢

我注意到Excel2010引入了异步UDF来帮助实现这一点


有没有人尝试过这种方法,有没有c#示例,或者有没有其他方法可以提高Excel中web服务类型UDF的性能?

每当我遇到这种问题时,我总是决定用不同的方法来解决这个问题

在这种情况下,如果有任何方法可以批量调用并只进行一次webservice调用,那么这将是最好的选择,因为您只有一次往返,而不是1000次或其他任何方式

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


如果它是您自己的Web服务(我希望是这样,因为您说的是我们的Web服务),那么您应该能够修改它来实现这一点。如果您正在调用一个没有批处理功能的外部Web服务,那么我恐怕不知道如何最好地处理它,除了在不同的线程上触发大量异步UDF之外。

您可以使用Excel RTD提供异步数据检索。RTD允许您按需将更新推送到Excel,这意味着您可以从UDF调用快速返回,并在后台异步检索数据。请求完成后,您将通知Excel更新的值可用。您还可以非常轻松地将多个UDF调用批处理到单个web服务请求中,只需在RTD主题到达时将其排队,并定期形成批处理请求


是一个描述如何在C#中创建基本RTD服务器的链接。为了使解决方案更加用户友好,您可以将RTD工作表函数调用包装在UDF中。

谢谢。所以你在Excel表格中寻找调用你的Web服务的单元格?是的,这就是计划。然后将所有这些调用批处理为一个大调用(因此需要重写webservice以接受一个大的批处理调用)。关键是你需要往返一次服务,而不是1000次。嗨,Matthew,你最终采取了哪种方法来解决这个问题?批量调用,因为这很容易,但RTD服务器是更好的长期解决方案,我认为这很酷。简单听起来不错!谢谢你的更新。