gpt4 book ai didi

c# - WCF: session 数据、服务器对象和挫折

转载 作者:行者123 更新时间:2023-11-30 16:29:55 26 4
gpt4 key购买 nike

我是 WCF 的新手,已经在不同的部分进行了一些尝试,但仍然没有找到我最终想要的东西。我想创建一个服务器:我已经完成了我的服务器对象和我的数据契约(Contract),格式如下:

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 变量中。只需单击客户端上的按钮即可完成计算。然后,另一个按钮可以显示信息(假设它一次显示它的 block ——用户可以选择查看前 25、前 50、前 100 个结果等)。

我遇到的问题在这里:假设场景用户 A 优化结果 -> 服务器将结果保存在变量服务器端。用户 B 出现并优化结果 -> 服务器现在保存用户 B 的结果。用户 A 查看他的数据——但他实际上正在查看用户 B 的数据!!!

我最终想要的是让每个登录页面的人都有一个特定于他们的唯一服务对象,直到他们离开页面为止。

谢谢。

最佳答案

问题是静态客户端变量。所有网络应用程序 session 将共享同一个客户端实例。即使 Web 应用程序有很多 session 正在进行,它也只有一个与 WCF 服务的 session 。

您应该将其设为页面的私有(private)变量。在 WCF 服务端,确保服务实现类设置为 the Per Call mode所以每个页面实例都会收到自己的服务实例。

关于c# - WCF: session 数据、服务器对象和挫折,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6060371/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com