时间:2010-07-23 21:39:10

标签: asp.net jquery ajax web-services asmx

2 个答案:

答案 0 :(得分:2)

您需要明确决定在哪里进行异步调用,并确切知道在哪里运行以及生成哪些代码。没有魔术这样的东西: - )

只有[WebMethod]的函数才能作为Web方法显示 - 使用您给出的确切名称。所以至少你必须调用BeginSlowParrot和EndSlowParot,但这对你来说没什么用,因为调用1st会转到服务器Foo1而第二个转到服务器场Foo2,更不用说即使使用相同的服务器也是如此(比如粘性IP)您必须测试IAsyncResult背后的实际对象是否可以从JSON序列化重放(JSON与XML相比可以说是类型不好)。 即使它仍然只能在单点服务器方案中使用。

.NET libs知道如何通过在WSDL中看到它们时将Begin / End作为命名约定来自动代理方法,但它仍然是2个实际的Web方法 - 从IE做WebService1.asmx?WDSL并且你看到了什么声明了

如果你想在多个线程上从客户端异步调用某些东西(它们在IE而不是服务器中),那么你需要额外的JavaScript代码才能做到这一点 - 网络方法本身保持不变。你需要在客户端上安装第二个隐藏的DIV,它们只处理这些慢速调用,第三个和第四个 - 一个用于你想要的每种其他类型的异步交互。

所以我最好的猜测是你首先需要确认2 $ ajax(...)调用确实是序列化的(你需要2个慢速和不同的web方法来确认 - 每个返回不同的值)如果是这样,你需要挖掘包含$ ajax的包含的.js,看看那里发生了什么)。它可能是保护自己免受ppl尝试在浏览器中进行完全miltithreading然后抱怨他们的数据被损坏: - )

如果你想要服务器上的异步 - 必须保留在该服务器上 - 你的客户端仍然必须等待它所做的一次调用的响应,但是web方法代码可以产生5个异步调用来运行它的东西,等待让他们完成,收集和合并结果,然后将其发回。

哦,如果你想从ASPX页面复制一些内容,你需要深入研究为它生成的源代码(在浏览器中),并且知道你的C#代码中的哪些东西是什么。 ASP.NET非常努力地将这些内容隐藏起来并尽可能地让您感到困惑。它是为那些厌恶客户端 - 服务器编程并希望假装他们正在编写本地Windows应用程序的人而完成的。所以无论你看到什么都有完全私有的API,你必须查看生成的页面(标签和js代码和包含),你想看看发生了什么。

答案 1 :(得分:0)