Мне нужно разработать сервис WCF, который будет открыт только через HTTP / HTTPS. Как использовать HTTP куки? - PullRequest
0 голосов
/ 08 ноября 2010

Прежде всего, я признаю, что я новичок в WCF.Все еще не из учебных колес.

Я был назначен для разработки службы WCF, и часть требований заключается в том, что своего рода «маркер сеанса» должен передаваться с каждым запросом в виде файла cookie HTTP.(Как и ожидалось, такой токен должен быть сгенерирован в заголовках HTTP-ответа успешного вызова «входа» в такую ​​службу).

Это просто?

Ответы [ 3 ]

2 голосов
/ 09 ноября 2010

Отказ от ответственности: на самом деле вы не должны ничего этого делать, потому что он заставляет службу WCF вести себя как веб-служба. Но если вам нужны куки, читайте дальше.

Если вам нужен только идентификатор сеанса, вы можете получить его по адресу:

OperationContext.Current.SessionId      

Если вам нужны куки-файлы, вам нужно прыгнуть через несколько обручей. Суть этого (1) установить совместимость с asp.net и (2) ссылаться на свойства HttpContext.Current.

Ваша служба должна будет использовать wsHttpBinding (или другую привязку, поддерживающую сеансы). Если вы создадите свой проект в качестве службы WCF, размещенной в IIS, вы получите их по умолчанию. Вам также необходимо установить совместимость с asp.net в конфигурационном файле.

<system.serviceModel>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
  <bindings>
    <wsHttpBinding>
      <binding name="MyBinding" allowCookies="false" ... </binding>
    </wsHttpBinding>
  </bindings>

(см. Ссылку здесь , чтобы узнать, почему у меня allowCookies = false)

Чтобы включить сеансы, в вашем сервисном контракте WCF установите следующее

[ServiceContract(SessionMode=SessionMode.Required)]
public interface IMyWcfService {...}

Возможно, вы также захотите установить ServiceBehavior для самой службы (PerSession по умолчанию), и вам необходимо установить совместимость с asp.net.

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Required)]
public class MyWcfService : IMyWcfService {...}

Некоторые релевантные свойства, к которым у вас есть доступ:

// Gives you the current session id as a string
HttpContext.Current.Session.SessionID  

// Indicates whether the service is using sessionless cookies
HttpContext.Current.Session.CookieMode

// Indicates whether the session id is stored in the url or in an HTTP cookie 
HttpContext.Current.Session.IsCookieless

// The cookies themselves
HttpContext.Current.Request.Cookies
HttpContext.Current.Response.Cookies

// The session and cache objects
HttpContext.Current.Cache
HttpContext.Current.Session

Ссылка на сеансы в службах WCF:
http://msdn.microsoft.com/en-us/library/ms733040.aspx

HTH,
Джеймс

0 голосов
/ 08 ноября 2010

Это только частично отвечает на ваш вопрос, но даст вам преимущество при настройке. В вашем конфигурационном файле в разделе конфигурации службы создайте базовые http-привязки, например:

<system.serviceModel> 
        <bindings>
  <basicHttpBinding>
      <binding name="myHttpBinding" allowCookies="true">

      </binding>

  </basicHttpBinding>
</system.serviceModel>

Затем ознакомьтесь с привязкой wcf и настройкой конечных точек.

0 голосов
/ 08 ноября 2010

Эта тема на MSDN может помочь вам http://msdn.microsoft.com/en-us/library/bb398778.aspx.

Кроме того, это может помочь вам с размещением службы WCF в IIS: http://msdn.microsoft.com/en-us/library/aa702682.aspx и http://msdn.microsoft.com/en-us/library/bb332338.aspx (хостинг с использованием информационных служб Интернета)

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