2012-02-16 87 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)中以鉻形式打開第二頁。
或嘗試從不同的計算機訪問每個頁面。