我最近将我的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;
}
所以我可以连接,但如何断开或关闭会话?
答案 0 :(得分:0)
Re:Globals,是的,在服务上使用静态将充当全局,并且因为你使用的是PerSession,所以“aaa”变量将是persssion。
Re:终止,尝试创建“终止”操作并设置属性参数IsTerminating = true。
P.S。我不认为WebGet属性与wsDualHttpBinding相关。