2010-01-22 82 views
3

一個簡單的問題,但我無法在谷歌找到答案。ASP.NET:WebService類多久實例化一次?如何在其中創建一個持久對象?

一個web服務類多久實例化一次?它是每次調用Web服務一次,是每個(任意一段時間)一次,每次都是一次?

編輯

我希望的生活類的好萬歲,但好像沒有。

問題是,我有一個用於服務請求的資源,並且每次重新加載此資源都不是一個選項(相反,一次加載它是一個選項並且是非常好的性能和其他 - 只是簡單的'明智')。 (不,沒有人會不高興,資源沒有被阻止或者什麼)

那麼我如何在Web服務中有一個對象,我可以使用它來提供所有請求? 很抱歉,如果問題有一個太明顯的答案,如「使用靜態變量」。作爲一個經驗豐富的程序員,我仍然沒有被正確地引入到網絡編程中,仍然在與一些一般概念作鬥爭。

+1

你總是可以通過寫一個快速測試來找到答案。在構造函數中放入日誌,然後多次調用Web服務,並在一段時間內調用Web服務。然後你可以計算日誌語句。 – 2010-01-22 13:50:50

+0

您使用的是asmx Web服務還是WCF Web服務。在WCF中,您的服務實例的創建由servicehostfactory控制。 – 2010-01-22 13:58:12

回答

0

所以。

使用所有默認設置,Web服務類的靜態變量(如常規桌面應用程序中的靜態變量)僅初始化一次。即使沒有人長時間撥打網絡服務,情況也是如此。您必須在IIS管理器中重新啓動應用程序才能重新初始化它們。這是偉大的,正是我想要的。所以答案就像「使用靜態變量」一樣簡單。

0

創建Web服務客戶端後,您可以儘可能多地調用其方法,而無需創建新的方法。

因此,沒有必要爲每個調用創建一個新的客戶端實例。雖然你當然可以。沒有什麼能阻止你。

例如,如果你正在消耗來自另一個Web服務的內部不同方法的Web服務,我認爲這是最好創建的每個方法中一個新的Web服務客戶端。 (由於Web服務的性質,在Web服務調用之間可能有很多時間)。

OTOH,如果您正在從Windows客戶端應用程序中使用Web服務,則可以輕鬆創建一個Web服務客戶端的全局實例,並始終使用該實例調用Web服務。

1

你談論客戶端或服務器端。我的答案在下面是關於服務器實例的,但@fretje的答案涉及到客戶端。

如果我們談論的System.Web.Services.WebService派生類中,你應該想一想,作爲每時間化身類。

如果我們談論的IHttpHandler的派生類,那麼你必須選擇IsReusable

+0

是的,我正在談論服務器端。我想我最好再編輯一下這個問題。 – GSerg 2010-01-22 15:22:23

0

東西你可能會發現有用的是Wsdl.exe工具自帶的.NET框架。你可以在這裏找到一些樣本/文檔: http://msdn.microsoft.com/en-us/library/7h3ystb6%28VS.80%29.aspx

基本上,如果你使用以下格式的工具;

wsdl /language:VB /out:myProxyClass.vb http://hostServer/WebserviceRoot/WebServiceName.asmx?WSDL 

您可以創建一個代理類文件,你可以看到這是怎麼回事/出系統的一切,並執行審計,日誌等希望這有助於。