2011-05-17 35 views
1

我最近將ASMX服務轉換爲WCF以充分利用會話。WCF關閉連接/釋放資源

我已經回顧了一些關於MSDN的會話教程,但仍然不確定我在代碼中有一個好的設置。截至目前它的工作原理,但我不確定爲什麼。

[ServiceContract 
    (SessionMode = SessionMode.Required, 
    Namespace = "http://smartshopservice.org")] 

然後,我有

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] 
public class SmartShopService : SmartShopInterface 
{ 
    private static Shopper sh = new Shopper(); 
    private List<aaa> data = new List<aaa>(); 

我的問題的第一部分是購物者是否是我的 「全局」 變量。我希望它始終在那裏,而其他所有內容(如「數據」)都會在每個會話中實例化。我也安裝了WebConfig。還有什麼我需要做的?

我的第二個問題是如何關閉一個會話,然後刷新所有這些變量?我的客戶現在是一個Web客戶端,它是溝通這樣的:

static GarfieldService.SmartShopInterfaceClient service 
    = new GarfieldService.SmartShopInterfaceClient(); 

它似乎工作,我有onbody = ASP.NET頁的「」地叫,看起來像這樣的功能:

[WebMethod] 
public static bool Connect() { 
    try { 
     if (service.State 
      == System.ServiceModel.CommunicationState.Closed) { 
      service.Open(); 
      return true; 
     } 
     else if (service.State 
      == System.ServiceModel.CommunicationState.Created) { 
      service.Open(); 
      return true; 
     } 
    } 
    catch {} 
    return false; 
} 

所以我可以連接,但如何斷開連接或關閉會話?

+0

你使用什麼綁定? – Schneider 2011-05-18 12:44:06

+0

<服務 名稱= 「SmartShopService.SmartShopService」 behaviorConfiguration = 「MEX」> <端點 地址= 「/ SmartShopService」 結合= 「wsDualHttpBinding」 合同= 「SmartShopService.SmartShopInterface」/> <端點 address =「」 binding =「mexHttpBinding」 contract =「IMetadataExchange」/> Overload119 2011-05-18 12:46:03

回答

0

回覆:全局,是在服務上使用靜態將作爲一個全局的,因爲你使用的是PerSession,所以「aaa」變量將會被使用。

Re:終止,嘗試創建一個「終止」操作並設置屬性參數IsTerminating = true。

P.S.我不認爲WebGet屬性與wsDualHttpBinding相關。