2010-12-28 2 views
5

Пожалуйста, помогите, если сможете.Служба и сессия REST WCF в ASP.NET

Я пытаюсь получить доступ к текущему объекту сеанса приложения asp.net из службы WCF REST.

Не было никакого успеха. объект сеанса, доступный из службы, не является тем же, что и на страницах aspx.

Итак, вот мой вопрос: возможно ли получить доступ к текущему сеансу в службе REST WCF через HttpContext.Current.Session?

код имеет следующие пункты:

[AspNetCompatibilityRequirements 
(RequirementsMode = 
AspNetCompatibilityRequirementsMode.Allowed)] // I have also tried Required 
public class DataService : IDataService 

в web.config:

<system.serviceModel> 
    <behaviors> 
    <endpointBehaviors> 
    <behavior name="ClosedRoom.DataServiceBehavior"> 
    <enableWebScript /> 
    </behavior> 
    </endpointBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" > 
    <baseAddressPrefixFilters> 
     <add prefix="http://localhost:63399"/> 
     </baseAddressPrefixFilters> 
    </serviceHostingEnvironment> 

    <services> 
    <service name="ClosedRoom.DataService"> 
     <endpoint address="" behaviorConfiguration="ClosedRoom.DataServiceBehavior" 
     binding="webHttpBinding" contract="ClosedRoom.IDataService" /> 
    </service> 
    </services> 
</system.serviceModel> 

Спасибо,

+1

WCF анс ASP.NET две совершенно разные технологии. Пожалуйста, уточните свой вопрос. Непонятно, что вы пытаетесь выполнить. Сеансы ASP.NET не зависят от любого сеанса службы WCF, который вы можете разместить в своем приложении (ASP.NET web?). – Jan

+0

Попробуйте загрузить образец приложения из http://blogs.msdn.com/b/wenlong/archive/2010/02/21/using-asp-net-sessions-from-wcf.aspx и попытайтесь выяснить, чего не хватает , – decyclone

+0

Вы вызываете услугу из своего приложения или из браузера? Вы пытались проверить переданные файлы cookie? Сессия в ASP.NET определяется cookie. Если cookie не передается с запросом на обслуживание, создается новый сеанс. Btw. Услуги REST должны быть безстоящими = без какого-либо сеанса. –

ответ

4

для того, чтобы сеанс быть rehidrated, вам нужно предоставить ключ. В обычном приложении asp.net этот ключ предоставляется пользователем через параметр cookie или url.

Как вы планируете приобрести этот ключ у клиента REST? Как эти клиенты получают этот ключ изначально после аутентификации? Где они хранят ключ?

Вот почему большинство служб на основе REST принимают ключ доступа api, а также еще один ключ для подписывания каждого запроса.

Сессии ИМХО не имеют отношения к проектам на основе REST.

+0

Согласен с мнением этого сообщения. Я думаю, что OP должен добавить еще один элемент в свою архитектуру. – jcolebrand

+0

@ user6130: Спасибо за этот ответ.Как вопрос для меня: я хочу добавить идентификатор пользователя в файл cookie (который я установил во время входа в систему со скользящим истечением 5 минут) и использовать его для подписи моего запроса и проверки на стороне сервера, если этот идентификатор пользователя имеет доступ к данным он пытается запросить. Будет ли это считаться хорошей практикой? Благодаря! :) – Flo

1

Я знаю, что этот вопрос был задан давно, но это может быть достигнуто за счет размещения ФОС успокоительной службы в приложении ASP.NET, а затем на верхней части класса обслуживания добавьте следующий атрибут:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 

Это дает много вещей, в том числе:

HttpContext: услуги WCF, работающие в режиме совместимости ASP.NET может получить доступ тока и связанный с ним состояние.

Смотрите здесь для получения дополнительной информации: What does AspNetCompatibilityRequirements really mean?

Смежные вопросы