我正在开发一个ASP.NET MVC web应用程序(C#),它是整个大型应用程序的一个模块(主要是基于桌面/win服务的- VB.NET)。目前,应用程序对web服务(作为API提供)进行HTTP调用,这是它自己的独立应用程序(也使用MVC、VB.NET)。也许不是我设计它的方式,但它是我继承的。
我的问题是:如果我在本地IIS中托管MVC应用程序,并在中运行API项目,那么一切都是好的。如果我将这两个项目拆分为在本地IIS中的单独应用程序池中运行,那么一切都是好的。但是,如果我在IIS中的同一个池中运行这两个应用程序,就会遇到许多问题。也就是说,当我调用HttpClient.GetAsync(url)时--特别是在调用这9次的页面上--根据ID动态检索不同的图像(每个调用都是对MVC应用程序进行调用,然后调用API)。有些电话打过去了,大多数打不通。
异常与取消的任务有关(超时值=100),但是操作只需要一小部分秒,所以不需要超时。执行甚至不会在API端失败时进入函数--就像HTTP客户机已经放弃提供更多的连接,或者任务正在等待HTTP发送请求,而它从来没有这样做过。
我试过让它一直都是异步的,尝试过使HttpClient静态,等等,但是没有joy。这仅仅是不应该做的事情吗?允许两个应用程序共享一个应用程序池吗?如果是这样的话,我可以接受。但如果我能做些什么来更有效地处理这件事,那将是非常有用的。如能提供有关这方面的任何资料/资源,将不胜感激。阿塔!
发布于 2018-01-31 10:54:59
我们最近遇到了同样的问题,经过了相当多的调试才发现,使用相同的applciation池是问题的原因。
我还发现,如果您在应用程序池的高级设置中增加了最大工作进程的数量,这也是可行的。
我不知道为什么会这样,但我猜所有的请求都是由一个进程处理的,这会导致积压,最终导致超时。(不过,我很高兴有一位更熟悉IIS的人来纠正我)
HTH
编辑:在进一步阅读Carmelo Pulvirenti博客时,似乎垃圾收集器应该受到指责。博客指出,运行在同一个池上的多个应用程序共享内存,副作用如下;
这意味着GC每秒运行大量时间,以便为应用程序提供干净的内存。副作用是什么?在服务器模式下,垃圾收集器需要停止所有线程活动来清理内存(这在.NET FX4.5上得到了改进,因为排序规则不需要停止所有线程)。副作用是什么?
https://stackoverflow.com/questions/43488585
复制相似问题