在 C# IHttphandler 上对 jQuery 自动完成的随机排序请求

Posted

技术标签:

【中文标题】在 C# IHttphandler 上对 jQuery 自动完成的随机排序请求【英文标题】:random ordered request for jQuery Autocomplete on C# IHttphandler 【发布时间】:2011-05-15 02:49:20 【问题描述】:

我有一个自动完成文本框,通过用 C# 编写的 IIS7 请求 IHttphandler。

但是到达网络服务器的请求似乎是无序到达的。

这是我在输入“guidolin”后从 IHttpHandler 获得的日志示例

406302 2010-11-24 12:33:58,448 [8256] DEBUG Services.jQueryHandler  - VALID jQueryHandler request data:guidoli RequestTime:24/11/2010 12:33:58(396)
406418 2010-11-24 12:33:58,564 [8256] DEBUG Services.jQueryHandler  - VALID jQueryHandler request data:guidolin RequestTime:24/11/2010 12:33:58(507) 
407751 2010-11-24 12:33:59,897 [8256] DEBUG Services.jQueryHandler  - VALID jQueryHandler request data:gu RequestTime:24/11/2010 12:33:58(685) 
408008 2010-11-24 12:34:00,154 [8256] DEBUG Services.jQueryHandler  - VALID jQueryHandler request data:guid RequestTime:24/11/2010 12:34:00(56) 
408167 2010-11-24 12:34:00,313 [8000] DEBUG Services.jQueryHandler  - VALID jQueryHandler request data:guido RequestTime:24/11/2010 12:34:00(244) 
408562 2010-11-24 12:34:00,708 [5912] DEBUG Services.jQueryHandler  - VALID jQueryHandler request data:gui RequestTime:24/11/2010 12:34:00(368) 
408832 2010-11-24 12:34:00,978 [8000] DEBUG Services.jQueryHandler  - VALID jQueryHandler request data:guidol RequestTime:24/11/2010 12:34:00(946) 

很明显,请求没有按正确的顺序到达。有没有人已经遇到过这个问题,或者有人知道解决方法吗?

这里是自动完成的 jQuery 代码:

textBox.autocomplete(
  source: textBox.attr("data-handler-url"),
  select: function (event, ui) 
    textBox.next("input[type='hidden']").val(ui.item.objectId);
    textBox.data('selected-value', ui.item.value);
  
);

【问题讨论】:

你的 jQuery 代码是什么样的?你有什么特别的吗? 不,它只是像这样请求 IHttphandler: 您确定这是服务器端的问题吗?无论如何这有关系吗?当网站负载很重时,我怀疑您能否保证请求以“正确”的顺序得到处理。 textBox.autocomplete( source: textBox.attr("data-handler-url"), select: function (event, ui) textBox.next("input[type='hidden'] ").val(ui.item.objectId); textBox.data('selected-value', ui.item.value); ); 当然,我的意思是,当您的生产系统确实处于高负载状态时,您就更不可能对处理订单有任何保证 - 所以这不是您可以依赖的东西,而在这种情况下很奇怪,不必担心。 【参考方案1】:

这是 HTTP,根据定义是一个 无状态 协议。 HTTP 中没有“顺序”的概念;一切都从请求消息开始。您不能以期望或要求请求具有任何逻辑顺序的方式编写应用程序;毕竟,选择发送请求的是客户端。只有他们到达的物理顺序很重要。

在您的示例中,谁能说客户端没有输入guidolin,然后将其更改为gu

要回答您的问题,此问题没有解决方法,因为它不是问题。如果可能的话,对您的应用程序进行编程,使其不关心这些消息到达的“顺序”。

【讨论】:

以上是关于在 C# IHttphandler 上对 jQuery 自动完成的随机排序请求的主要内容,如果未能解决你的问题,请参考以下文章

C# 线程真的可以缓存一个值并忽略其他线程上对该值的更改吗?

IHttpHandler 与 IHttpModule

C#防盗链处理类的代码

IHttpHandler

System.Web.Routing.UrlRoutingModule 未实现 IHttpHandlerFactory 或 IHttpHandler

C#中安卓程序员写的App的代码在哪