Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading IIS工作线程问题_Multithreading_Wcf_Iis_Web Config_Worker Process - Fatal编程技术网

Multithreading IIS工作线程问题

Multithreading IIS工作线程问题,multithreading,wcf,iis,web-config,worker-process,Multithreading,Wcf,Iis,Web Config,Worker Process,我的网站托管在IIS托管上。站点具有需要调用WCF服务然后返回结果的功能。问题是该网站正在处理对WCF服务的调用,而另一个网站的调用是冻结的,不能快速返回内容(这只是静态内容)。我用不同的imacros脚本设置了两个chrome实例,一个调用请求wcf服务的页面,另一个页面只是静态内容。所以在这里我可以看到,当请求wcf服务的第一个页面冻结时,另一个页面也会冻结,当第一个页面被释放时,第二个页面也会冻结 我是否需要重新配置Web.Config中的某些内容,或者我是否应该采取其他措施来立即获取静态

我的网站托管在IIS托管上。站点具有需要调用WCF服务然后返回结果的功能。问题是该网站正在处理对WCF服务的调用,而另一个网站的调用是冻结的,不能快速返回内容(这只是静态内容)。我用不同的imacros脚本设置了两个chrome实例,一个调用请求wcf服务的页面,另一个页面只是静态内容。所以在这里我可以看到,当请求wcf服务的第一个页面冻结时,另一个页面也会冻结,当第一个页面被释放时,第二个页面也会冻结


我是否需要重新配置Web.Config中的某些内容,或者我是否应该采取其他措施来立即获取静态内容。

我认为这是一个线程问题。这篇MSDN KB文章对如何优化ASP.NET线程行为提出了一些建议:

来自文章-…您可以调整Machine.config文件中的以下参数以最适合您的情况:

  • maxWorkerThreads
  • minWorkerThreads
  • 最大线程
  • 自由螺纹
  • minLocalRequestFreeThreads
  • maxconnection
  • 执行超时
要成功解决这些问题,请执行以下操作:

  • 将每个CPU可同时执行的ASP.NET请求数限制为大约12个
  • 允许Web服务回调自由使用线程池中的线程
  • 为maxconnections参数选择适当的值。根据使用的IP地址和AppDomain的数量进行选择

等等。

您可以尝试使用AppFabric,看看您的WCF服务有什么问题。

考虑这样的情况:当您向IIS发出请求时,您的应用程序会在app_数据文件夹外更改、删除或创建一些文件。这通常是一个日志文件,被错误地放在应用程序的bin文件夹中。文件系统更改会导致IIS重新加载AppDomain,因为它认为应用程序已更改,因此会出现延迟。这可能适用于您的问题,也可能不适用于您的问题,但这是ASP.NET应用程序中的常见错误。

好吧,也许没有问题

它可能只是浏览器的同一域同时请求限制。
在浏览器没有完成对第一个页面(WCF页面)的请求之前,它不会将请求发送到第二个页面(静态页面)

试试这个:
每个页面使用不同的浏览器(例如chrome/firefox)。
或者在“匿名”窗口中的chrome中打开第二页(Ctrl+Shift+N)。

或者尝试从不同的计算机访问每个页面。

我认为这里有两个不同的问题:

  • 为什么使用WCF服务的页面会冻结
  • 为什么静态内容页会冻结
  • 在调用WCF服务的页面上,一个常见问题是WCF客户端未关闭。默认情况下,有10个WCF连接,超时时间为1分钟。前10个调用正常(假设它们执行12秒),然后第11个调用到来,没有可用的WCF连接,因此必须等待58秒,以使连接超时并可用

    关于静态页面冻结的原因。可能是您的客户端只允许一次到站点的连接,只有在完成对带有wcf服务的页面的请求后,才会发送对静态页面的请求


    您应该检查IIS日志,了解IIS报告请求的时间必须多长。

    网站运行的是哪个版本的IIS?它是IIS 7.5,共享主机。是否只有两个页面请求(一个到服务页面,一个到静态页面)发生这种情况或者它是在有多个请求挂起的情况下加载的?我在共享windows主机上,似乎只能调整我自己的web.config文件。你的方法符合这个条件吗?我不这么认为。您需要在machine.config中更改这些设置。来自MSDN():processModel部分只能在Machine.config文件中设置如何设置“允许Web服务回调自由使用线程池中的线程”项?请给出建议。如果我理解正确,AppFabric可能只有在WCF服务托管在IIS下时才有用?是的。你说得对。您的WCF服务在哪里托管?如果可能的话,您可以将web服务称为双工服务,而不是等待它立即响应。它是自托管的WCF服务,托管在控制台应用程序中。呼叫双工不像我想的那么合适。然而,您依赖外部方提供数据,这可能会很耗时,但您可能会担心异步编程