【发布时间】:2008-10-31 13:39:58
【问题描述】:
我正在尝试将数据源绑定到转发器,例如,在页面加载时绑定到 Web 服务(来自不同网站的 .asmx)。 Web 服务从 sql 调用返回一个 DataSet。这样做的最佳方法是什么?
【问题讨论】:
标签: asp.net sql-server vb.net web-services asmx
我正在尝试将数据源绑定到转发器,例如,在页面加载时绑定到 Web 服务(来自不同网站的 .asmx)。 Web 服务从 sql 调用返回一个 DataSet。这样做的最佳方法是什么?
【问题讨论】:
标签: asp.net sql-server vb.net web-services asmx
因为您正在调用另一个网站,所以您必须解决两个问题(特别是如果此 Web 服务位于其他人的网站上或通过公共互联网)。首先,从其他网站检索数据可能会有延迟。其次,其他网站可能会超时。
您至少应该考虑asychronous page 请求。正如这篇 MSDN 文章所述:
如果同步请求变成 I/O bound——例如,如果它调用 远程 Web 服务或查询 远程数据库并等待调用 回来——然后分配的线程 请求被卡在无所事事 直到电话返回。这阻碍了 可伸缩性,因为线程池 有有限数量的线程 可用的。如果所有请求处理 线程被阻塞等待 I/O 要完成的操作,额外的 请求排队等待 线程是免费的。最好, 吞吐量下降,因为请求 等待更长的时间来处理。在最坏的情况下, 队列已满,ASP.NET 失败 带有 503 "Server 的后续请求 不可用”错误。
但最好的解决方案可能是使用 AJAX。加载页面然后发出 ajax 请求来填充中继器。这样,您就可以在等待 Web 服务时获得漂亮的“旋转”图形或发生其他事情。
【讨论】:
调用网络服务,获取结果,并将其绑定到您的转发器。
如果可以,您也可以尝试将信息缓存一段时间,以帮助提高整体性能。
【讨论】: