WCF关闭连接/释放资源

时间:2011-05-17 15:52:30

标签: c# asp.net wcf service

我最近将我的ASMX服务转换为WCF以利用Sessions。

我已经回顾了MSDN上的一些Sessions教程,但仍不确定我的代码中是否有良好的设置。截至目前它的确有效,但我不确定为什么。

我得到了

[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>();

我的问题的第一部分是Shopper是否是我的“全局”变量。我希望它始终存在,而“数据”等其他所有内容都会在每个会话中实现。我也适当地设置了WebConfig。还有什么我需要做的吗?

我的第二个问题是如何关闭会话,然后刷新所有这些变量?我的客户端现在是一个WebClient,它正在这样沟通:

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

它似乎工作,我有ASP.NET页面的onbody =“”来调用这样的函数:

[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;
}

所以我可以连接,但如何断开或关闭会话?

1 个答案:

答案 0 :(得分:0)

Re:Globals,是的,在服务上使用静态将充当全局,并且因为你使用的是PerSession,所以“aaa”变量将是persssion。

Re:终止,尝试创建“终止”操作并设置属性参数IsTerminating = true。

P.S。我不认为WebGet属性与wsDualHttpBinding相关。