2012-02-16 110 views
3

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

我是否需要重新配置Web.Config中的某些内容,或者是否应该做其他事情以便立即获取静态内容。

+0

哪个版本的IIS是运行的网站? – 2012-02-16 12:03:01

+0

它是IIS 7.5共享主机。 – kseen 2012-02-16 13:55:20

+0

这是否只发生两个页面请求(一个到服务页面,另一个到静态页面),还是在有多个请求挂起的情况下处于加载状态? – Ragoczy 2012-02-20 14:07:35

回答

2

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

  1. 为什么使用WCF服务冻结
  2. 页面为什么静态内容页面冻结

在页面调用WCF服务的一个常见问题是WCF客户端未关闭。默认情况下有10个WCF连接,超时时间为1分钟。前10个电话都没有问题(比如他们执行了2秒),然后第11个电话到来了,没有免费的wcf连接,因此它必须等待58秒才能连接到超时并变得可用。

关于你的静态页面冻结的原因。这可能是因为你的客户端只允许一个连接到站点,静态页面的请求不会被发送,直到wcf服务页面的请求完成。

您应该检查IIS日志以了解IIS如何报告请求正在执行。

1

我会说这是一个线程问题。这MSDN知识库文章有如何调整ASP.NET线程行为的一些建议:

http://support.microsoft.com/kb/821268

从文章 - ...你可以调整你的Machine.config下列参数的文件,以最合适的您的情况:

  • maxWorkerThreads
  • minWorkerThreads
  • maxIoThreads
  • 个minFreeThreads
  • minLocalRequestFreeThreads
  • MAXCONNECTION
  • executionTimeout

要成功解决这些问题,请执行下列操作:

  • 限制可以在同一执行ASP.NET请求的数量时间约为每个CPU 12个。
  • 允许Web服务回调自由使用ThreadPool中的线程。
  • 为maxconnections参数选择适当的值。将您的选择基于所使用的IP地址和AppDomain的数量。

等等

+0

我在共享窗口托管,它似乎只能调整我自己的web.config文件。你的方法是否适合这种条件? – kseen 2012-02-16 16:09:41

+0

我不这么认为。您需要在machine.config中更改这些设置。从MSDN(http://msdn.microsoft.com/en-us/library/7w2sway1.aspx):* processModel部分只能在Machine.config文件中设置* – 2012-02-16 16:13:07

+0

如何设置此'允许Web服务回调在ThreadPool中自由使用线程。'项目?请指教。 – kseen 2012-02-17 05:29:15

0

你可以尝试使用AppFabric的,看看有什么不对您的WCF服务http://msdn.microsoft.com/en-us/windowsserver/ee695849

+0

如果我说得对,AppFabric可能仅在WCF服务托管在IIS下时才有所帮助? – kseen 2012-02-22 02:57:52

+0

是的。你是对的。您的WCF服务托管在哪里?如果可能的话,您可以将Web服务称为双工,而不是立即等待它的响应。 – marvelTracker 2012-02-22 07:31:31

+0

它是托管在控制台应用程序中的自托管WCF服务。调用双面打印机并不适合我想要的。 – kseen 2012-02-22 08:15:07

1

考虑这样的场景:当您对您的IIS应用程序的更改,删除请求或者在App_Data文件夹外创建一些文件。这往往是一个日志文件,它被错误地放在应用程序的文件夹bin。由于它认为应用程序已更改,文件系统更改导致AppDomain通过IIS重新加载,因此经历了延迟。这可能会也可能不会适用于您的问题,但这是ASP.NET应用程序中常见的错误。

1

好吧,也许是没有问题的......

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

试试这个:
使用不同的浏览器为每个页面(例如铬/ Firefox浏览器)。
或者在隐身窗口(Ctrl + Shift + N)中以铬形式打开第二页。
或尝试从不同的计算机访问每个页面。