小编Ami*_*nja的帖子

Web API服务 - 如何使服务器上的请求同时执行

我正在使用由IIS 7.5托管的WebApi休息服务控制器,我从这篇文章中了解到:

是否所有Web请求都是并行执行的并且是异步处理的?

的WebAPI服务,默认情况下,并行执行所有传入的请求,但只有目前的多个请求(在某一时刻)的来源不同的会话. 也就是说,如果单个客户端将同时向服务器发送一些请求,则所有这些请求将按顺序执行,并且不会同时执行.

这种行为对我们来说是一个真正的问题,因为在某些情况下,我们的客户端会异步地(通过浏览器)从不同客户端的侦听器发送大量请求,并且所有这些请求实际上都会排队,而不是在服务器上同时执行.因此,在某些情况下,我们遇到了严重的性能问题,这些问题在客户的网页上非常明显.

我们怎样才能解决这个问题?我知道我们可以 禁用会话状态,但这不是正常的事情.

c# asp.net-mvc multithreading session-state asp.net-web-api

9
推荐指数
2
解决办法
7292
查看次数

Web API服务 - 如何在异步任务中使用"HttpContext.Current"

我正在使用webApi休息服务的"Post"异步方法:

public async Task<object> Post([FromBody]string data)
{
      object response = ExecuteServerLogics(data);

      return response;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码工作得很好,但在一些客户的电话中,我们遇到了性能问题.

在这里阅读了一些文章后,我注意到我们的webApi休息服务并没有真正与其传入的Web请求异步工作,因为我们忘了使用async/await模式:

public async Task<object> Post([FromBody]string data)
{
      object response = await Task<object>.Run( () =>
      {
           return ExecuteServerLogics(data);
      });

      return response;
}
Run Code Online (Sandbox Code Playgroud)

在这个修复之后,我们注意到性能变得更好,但是我们发现了另一个批评问题:当访问HttpContext.Current时 - 它返回Null引用:

public async Task<object> Post([FromBody]string data)
{
      object response = await Task<object>.Run( () =>
      {
           var currentContext = HttpContext.Current; // Returns Null!
           return ExecuteServerLogics(data);
      });

      return response;
}
Run Code Online (Sandbox Code Playgroud)

我们试图为它找到一个解决方案,在大多数帖子中我们发现我们应该将工作线程的HttpContext引用传递给执行服务器逻辑的内部任务.这个解决方案的问题是服务器的逻辑方法,使用许多使用"HttpContext.Current"的静态类, 如 -

  1. 记录器调用.
  2. 检索user.identity的静态安全性类
  3. 静态安全类,用于检索传入请求的会话数据等.

因此,传递工作线程的 …

asp.net asynchronous httpcontext async-await asp.net-web-api

8
推荐指数
1
解决办法
1万
查看次数

是否所有Web请求都是并行执行的并且是异步处理的?

我正在使用由IIS托管的WebApi服务控制器,我正在尝试理解这种架构是如何工作的:

  1. 当WebPage客户端同时发送异步请求时,所有这些请求是否都在WebApi控制器上并行执行?

  2. 在IIS应用程序池中,我注意到队列大小设置为1,000默认值 - 这是否意味着在WebApi服务器上同时可以并行处理1,000个最大线程?或者这个值只与IIS队列有关?

  3. 我已经读过IIS维护某种线程队列,这个队列是异步发送它的工作吗?或者IIS发送给WebApi服务的所有客户端请求是否同步发送?

c# asp.net multithreading asynchronous asp.net-web-api

6
推荐指数
1
解决办法
8326
查看次数

如何从document.body(DOM)中删除所有Kendo DropDownList元素

我们在cardView kendo.ui.Window项目中使用了大约3个DropDownList组件.当窗口关闭时,我们为每个包含的DropDownList项调用'destroy'方法.

问题是以下代码没有删除已附加到文档正文的所有DropDownList的相关DIVS:

var dropdownlist = $("#dropdownlist").data("kendoDropDownList");
dropdownlist.destroy();
Run Code Online (Sandbox Code Playgroud)

经过一些搜索,我们在destroy方法的文档中注意到以下注释(来自Telerik): 重要说明:此方法不会从DOM中删除DropDownList元素.

因此,每当有人打开和关闭我们的kendo的窗口(卡片视图)时,会附加许多DropDownList的div而不从DOM中删除 - 这可能会导致DOM出现严重的性能问题.

保留在DOM中的附加DIVS是 - 例如"k-list-container"和"k-animation-container".

  1. 我怎么解决这个问题?
  2. 有没有办法彻底销毁每个DropDownList的元素(包括从DOM中删除所有相关元素)?
  3. 当我们需要销毁其他kendo.ui组件时,这个问题是否相关?(例如combobox,dateTimePicker,Tooltip等)由于我们的kendo.ui卡窗口还包含其他基本的kendo.ui组件.

jquery telerik-mvc kendo-ui kendo-ui-mvc

5
推荐指数
1
解决办法
9321
查看次数