WCF: данные сеанса, объекты сервера и разочарования - PullRequest
3 голосов
/ 19 мая 2011

Я новичок в WCF и занимаюсь различными секциями, но все еще не нашел того, чего в конечном итоге хочу. Я хочу создать сервер: мой серверный объект завершен вместе с контрактами на данные в формате:

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 лучших результатов и т. Д.).

Проблема, с которой я столкнулся здесь: предположим сценарий Пользователь А оптимизирует результат -> Сервер хранит результаты в переменной серверной части. Пользователь B приходит и оптимизирует результат -> Сервер теперь содержит результат пользователя B. Пользователь А просматривает свои данные - но он фактически просматривает данные пользователя Б !!!

В конечном итоге я хочу, чтобы каждый человек, входящий на страницу, имел уникальный сервисный объект, специфичный для него до момента, когда он покинет страницу.

Спасибо.

1 Ответ

3 голосов
/ 19 мая 2011

Проблема в статической клиентской переменной.Все сеансы веб-приложения будут использовать один и тот же экземпляр клиента.Даже если в веб-приложении выполняется много сеансов, оно имеет только один сеанс для службы WCF.

Вам просто нужно сделать его закрытой переменной для страницы.На стороне службы WCF убедитесь, что для класса реализации службы задано значение для режима «За вызов» , чтобы каждый экземпляр страницы получал свой собственный экземпляр service .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...