В страничке ASP.NET в сессию HttpContext.Current.Session пишется информация.
Хочется достать их в WCF сервисе.
Добавил [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] к классу сервиса и <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> в web.config. Пытаюсь извлечь через HttpContext.Current.Session, но сессии из WCF и ASP.NET получаются разными.
Здравствуйте, Sergei Soloviev, Вы писали:
SS>В чем причина этого непонятно. Что не так ?
Да все нормально там должно быть с чтением сессии. А ты уверен что у тебя и WCF и ASP.NET в одной сессии работают? Если ASP.NET страничка вызывается из браузера, а WCF сервис откуда-то еще, то естественно он ничего не знает о текущей ASP.NET сессии.
Например:
1. На asp.net страничке лежит AJAX контрол, которые берет данные из wcf сервиса, который хостится в этом же приложении, через HTTP GET — тут с сессией все нормально, она одна и для WCF и ASP.NET.
2. ASP.NET приложение на сервере берет данные из WCF сервиса, который хостится в этом же приложении — тут сессии будут разные.
Здравствуйте, Ахмед, Вы писали:
А>2. ASP.NET приложение на сервере берет данные из WCF сервиса, который хостится в этом же приложении — тут сессии будут разные.
Есть ASP.NET приложение, оно пишет в сессию. А WCF сервис, который использует консольное приложение, читает из сессии. Хостятся в одном приложение.
А>а WCF сервис откуда-то еще, то естественно он ничего не знает о текущей ASP.NET сессии.
А если WCF сервис будет вызываться Silverlight приложением с той же странички то сессия будет общая ?
Здравствуйте, Sergei Soloviev, Вы писали:
SS>Есть ASP.NET приложение, оно пишет в сессию. А WCF сервис, который использует консольное приложение, читает из сессии. Хостятся в одном приложение.
Тут просто надо понимать как идентифицируется сессия в ASP.NET. При создании сессии (первый запрос браузера) — сервер выдает sessionid, который хранится в куки и передается с каждым последующим запросом браузера, например ASP.NET_SessionId=dvqjx1jlva0qyl452ymuz555 (если куки на клиенте отключены — sessionid будет передаваться в виде параметра запроса). Если в запросе к WCF не будет sessionid (или он будет отличен от того что передал браузер), то естественно сессия не будет идентифицирована.
SS>А если WCF сервис будет вызываться Silverlight приложением с той же странички то сессия будет общая ?
Не скажу точно про сильверлайт, но думаю что да. В случае с Flex — определенно да, там куки так же передается в каждом запросе.