长职位..对不起调用webservice的异步
我一直在这读了,现在试图来回几天不同的解决方案,但我不能找到最明显的选择。我的困境。
关于我的情况;我向用户展示一个页面,该页面将包含几个不同的中继器,这些中继器显示一些基于来自几个Web服务调用的结果的信息。我希望将数据带入一个updatepanel(这将每隔两到三秒查询一次结果表,直到找到结果),所以我实际上想渲染页面,然后当数据是“准备就绪“就会显示出来。
该页面向控制器要求呈现的信息,并且控制器检查结果表以查看是否有任何可找到的东西。如果没有找到特定数据,它会调用WebServiceName.cs中的方法GetData()。 GetData不会返回任何东西,而是应该启动一个从web服务获取数据的异步操作。控制器返回null,并且UpdatePanel等待下一个查询。
当该操作完成时,它会将数据存储在数据库的相关位置,控制器在下一次请求时会找到它。
我现在的解决方案是启动另一个线程。我将举办页上的共享Web服务器,我不知道这是否会造成任何问题..
所以它驻留在page.aspx当前代码:
Thread t = new Thread(new ThreadStart(CreateService));
t.Start();
}
void CreateService()
{
ServiceName serviceName = new ServiceName(user, "12345", "MOVING", "Apartment", "5100", "0", "72", "Bill", "rate_total", "1", "103", "serviceHost", "password");
}
起初我还以为解决方案是使用Begin [Method]和End [Method],但似乎没有生成这些。我认为这似乎是一个很好的解决方案,所以当他们没有出现时我有点沮丧..有没有机会在添加Web引用时错过复选框或其他东西?
我不想使用[方法]异步,因为这会停止从渲染页面,直到[方法] AsyncCompleted被我所了解的内容调用。
我要做的调用不是CPU密集型的,我只是坐在慢速服务器上的webService上,所以我从这篇文章中了解到:http://msdn.microsoft.com/en-us/magazine/cc164128.aspx使线程池变大并不是一种选择,这实际上会降低性能(因为我不能投入硬件)。
您认为对我目前的情况来说最好的解决方案是什么?我真的不喜欢当前的(只有内心的感觉,但无论如何)
感谢您阅读这个相当长的帖子..
谢谢,我真的很感激。我明天会试试这个。作为旁注,aspx页面不允许使用async“feature”来调用异步方法。至少不是在我的情况下,因为我得到一个运行时错误,说明这个方法被调用的时候。 – Phil 2010-08-31 22:58:10
就这样,我得到了这个直线,我应该欺骗IIS渲染页面,即使它应该被阻止?听起来很有趣:) – Phil 2010-08-31 23:01:29
是的;总结一下。 – 2010-09-01 04:32:01