Служба REST WCF и сеанс в ASP.NET - PullRequest
5 голосов
/ 28 декабря 2010

Пожалуйста, помогите, если можете.

Я пытался получить доступ к текущему объекту сеанса приложения 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>

Спасибо,

Ответы [ 2 ]

4 голосов
/ 28 декабря 2010

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

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

Именно поэтому большинство служб на основе REST используют ключ доступа API, а также другой ключ для подписи каждого запроса.

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

1 голос
/ 03 августа 2016

Я знаю, что этот вопрос задавался давно, но этого можно добиться, разместив службу wcf restful в приложении asp.net, а затем в верхней части класса обслуживания добавьте следующий атрибут:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]

Это включает много вещей, включая:

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

Подробнее см. Здесьinfo: Что на самом деле означает AspNetCompatibilityRequirements?

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