2009-09-08 33 views
4

我有一個運行在IIS 7.0上的.net 2.0 web服務。首次調用Web服務很慢;由緊湊框架贏得應用程序

我消耗從緊湊架構書面申請(CF 2.0)該服務。 第一次通話需要13秒,所有後續通話都超快(1秒以內)。沒有數據被緩存。

任何想法如何解決這個問題?

+0

這是每個會話的第一個呼叫嗎?還是服務本身加載到內存後的第一個調用? – 2009-09-08 20:59:18

+0

請參閱我對Traveling Tech Guy的回答的評論。 – sarsnake 2009-09-08 21:01:27

+0

客戶端有什麼我應該讓它更快? – sarsnake 2009-09-08 21:07:22

回答

5

下一個應用CF第一呼叫是當所有代理都創建在設備上的對象。因此,即使服務器上的對象等已經啓動,每個設備的第一個呼叫也將比其他任何呼叫慢得多。

一個常見的解決方法是讓你的服務暴露了一些存根方法(如果你想讓它可以什麼都不做),當你的應用程序啓動時,產生一個工作線程調用此存根。這會在後臺爲您創建服務代理對象,因此當您的應用程序實際向服務發出呼叫時,所有事情都已準備就緒。

+0

好的,這樣更有意義,謝謝! 一兩件事,我不明白,然後,就是每隔一段時間通話將需要更長的時間,然後一些快速調用,那麼在長時間的通話。這幾乎就像在瘦客戶端上運行的一個cron作業一樣,它刪除了代理對象。 – sarsnake 2009-09-08 22:58:39

+0

我可以對這些代理對象進行一些控制嗎? – sarsnake 2009-09-08 23:16:39

+0

我的猜測是,JITTted代理越來越顛簸必須重新即時編譯。遠程性能監視器可以驗證 - 在長時間通話之前查看是否在收藏中有音高。你真的沒有在代理對象的任何控制,他們需要得到建立,並像任何其他託管對象,代碼可如果GC認爲有必要,可以投。 – ctacke 2009-09-09 00:10:26

0

是它第一次調用所有的IIS後啓動,或者服務器啓動?
有史以來第一次調用IIS總是比較慢。我們曾經通過使用腳本在重新啓動時創建虛擬調用或IISRESET來解決它,以吸收第一次調用的懲罰。

+0

IIS始終處於開啓狀態。永遠不會重新啓動。從CF桌面應用程序到Web服務的第一個調用速度很慢,隨後的所有後續調用都會超快3分鐘左右,後續調用緩慢,等等。 – sarsnake 2009-09-08 21:00:57

+0

它可以是您的應用程序池重新啓動,如下面的答案所示,也可以是與服務器物理相關的東西,比如硬盤驅動器爲了節約電力而旋轉。還值得檢查的是緩存參數。 – 2009-09-08 21:51:23

+0

是Web服務的正常行爲嗎?第一次變慢?或者它應該馬上變快?看着論壇,我收到了矛盾的觀點。 – sarsnake 2009-09-08 22:15:48

3

第一個電話被加載.NET運行庫和JITting的Web方法調用。許多部署服務的商店並不是第一次真正在意,但是當他們這樣做時,他們會有一些東西打電話給它,作爲部署的一部分,以便第一次擺脫困境。另一種方法是NGEN吧。

+0

請詳細說明。 1)它是否安裝在客戶端?網絡服務器? 2)如果在客戶端上,它是否適用於WinCE,CF 2.0? – sarsnake 2009-09-08 21:24:51

+0

您將在服務器上執行此操作。您的服務器端的Web服務是ASP.NET 2.0,可能會執行重要的任務,例如從數據庫獲取數據等。在客戶端花費的時間很可能不多。同時檢查你的global.asax.cs文件,看看是否有任何設置例程在第一次請求時運行,並可能延遲其中的一些工作來分散工作。 – 2009-09-08 21:42:38

+0

謝謝傑西,我現在把定時器。 – sarsnake 2009-09-08 22:11:04

0

而且,當應用程序被稱爲您運行的SQL連接打開的第一次。如果有網絡問題,這可能需要更長的時間。 應用程序閒置一段時間後,連接可能會自動關閉。

+0

因爲我測試Web服務時使用不同的參數,當它很快,網絡連接似乎很好。正如我所說,沒有數據被緩存,所以如果網絡有問題,它會顯示每一次,不是嗎? 這似乎太巧合了。我想我錯過了一些東西。問題是什麼。 – sarsnake 2009-09-08 21:20:57

相關問題