2013-06-21 130 views
0

有沒有辦法將C#ASMX WebService定義爲單例?也許在Web.config文件中?目前我沒有使用WCF。Singleton WebService(ASMX,不是WCF)

在此先感謝

[WebService(Namespace = "http://www.mydomain.eu/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [System.ComponentModel.ToolboxItem(false)] 
    public class MyService : System.Web.Services.WebService 
    { 
     ... 
    } 
+0

這樣做你想達到什麼目的? – Steven

回答

0

不能創建Singleton Web服務,因爲Web服務上運行IIS和被視爲web應用程序,並保持這樣。每個客戶端將共享一個應用實例,但他們每個人都會有自己的請求,響應,會話等

+0

好的,謝謝你的信息。那麼我會換成WCF。 – Matthias

1

您可以隱藏一個門面是一個單背後的網絡服務:

public static class ServiceFacade 
{ 
    public static void ServiceOperation() 
    { 
     using (var service = new MyService()) 
     { 
      service.Operation(); 
     } 
    } 
} 
+0

但是服務器端(服務)的AppDomain是在每個客戶端請求上創建/銷燬的。所以,即使靜態對象也沒有效果。要麼? – Matthias

+1

這是不正確的。客戶端不控制服務AppDomain的創建和破壞。這取決於服務器上的主機環境。 Web服務通常由IIS託管,IIS通常會有一個AppDomain很長一段時間(因爲創建AppDomain的代價非常高)。你可以在IIS中配置它。 – Steven

+0

感謝您的提示。我將檢查是否可以相應地配置VisualStudio的開發服務器。 – Matthias

0

您可以隨時使主數據對象也是靜態的,並且將通過所有工作者實例共享。

+0

但是服務器端(服務)的AppDomain是在每個客戶端請求上創建/銷燬的。所以,即使靜態對象也沒有效果。要麼? – Matthias

+0

我認爲有可能在IIS中配置行爲,但我實在不記得。爲什麼你想使用asmx來支持WCF呢? – Tanel

+0

我對ASMX更加熟悉,但我想我現在將切換到WCF。反正它更靈活。 – Matthias