我是WCF的新手,并且在不同的部分进行过dib-dabbing,但仍然没有找到我最终想要的东西。我想创建一个服务器:我的服务器对象与我的数据合同一起完成,格式为:
public class SmartShopService : SmartShopInterface
{
private Shopper sh;
private List<ShoppingTripEvaluation> bestTrips;
public SmartShopService() {
sh = new Shopper();
bestTrips = new List<ShoppingTripEvaluation>();
}
// (Various methods go here)
}
客户端是一个ASP.NET页面,如下所示:
public partial class Garfield : System.Web.UI.Page {
static GarfieldService.SmartShopInterfaceClient client = new GarfieldService.SmartShopInterfaceClient();
protected void Page_Load(object sender, EventArgs e) {
}
[WebMethod]
public static bool SomeMethod() {
}
[WebMethod]
public static bool SomeMethod2() {
}
}
现在,在这个页面中有许多表格。例如,假设客户端应该找到A和B之间的最快路径。它将所有可能的方式存储在服务器上的List变量中。只需单击客户端上的按钮即可完成计算。然后,另一个按钮可以显示信息(假设它一次显示它的块 - 用户可以选择查看前25个,前50个,前100个结果等)。
我遇到的问题在于:假设情景 用户A优化结果 - &gt;服务器将结果保存在服务器端变量中。 用户B出现并优化结果 - &gt;服务器现在保存用户B的结果。 用户A查看他的数据 - 但他实际上正在查看用户B的数据!!!
我最终想要的是,每个登录页面的人都有一个特定的服务对象,直到他们离开页面为止。
感谢。
答案 0 :(得分:3)
问题是静态客户端变量。所有Web应用程序会话将共享同一客户端实例。即使Web应用程序有很多会话,它也只有一个会话到WCF服务。
你应该把它变成页面的私有变量。在WCF服务端,确保服务实现类设置为the Per Call mode,以便每个页面实例都将收到自己的服务实例。