Использование состояния сеанса ASP.NET с Silverlight (PRISM) - PullRequest
1 голос
/ 05 мая 2010

Сценарий: У меня есть приложение PRISM, разработанное в Silverlight (4), и я использую серверное приложение ASP.NET для размещения нескольких веб-сервисов (которые, в свою очередь, обращаются к WCF-сервисам, но это не очень важно здесь). Приложение Silverlight должно иметь возможность вызывать междоменный домен веб-служб (это означает, что веб-службы не обязательно находятся на том же сервере, на котором размещено приложение Silverlight).

Приложение Silverlight состоит из нескольких модулей, каждый из которых обращается к веб-службам ASP.NET.

У меня нет большого опыта работы с Silverlight и PRISM, но, насколько я понимаю, это не очень необычный сценарий ...

Проблема: Моя проблема заключается в том, что когда 2 разных модуля получают доступ к веб-сервисам, я получаю 2 новых сеанса на веб-сервере. Я бы подумал, что, поскольку оба модуля живут на одной и той же HTML-странице (а затем и в одной и той же сессии браузера), они получат одну и ту же сессию на веб-сервере ...?

Я попытался сделать прокси-клиент веб-службы глобально доступным в контейнере (используя Unity), зарегистрировав экземпляр (используя Container.RegisterInstance), а затем получив этот экземпляр всякий раз, когда модуль должен сделать веб-запрос. вызов службы (с использованием Container.Resolve), но это, похоже, не помогает.

Однако любые вызовы, сделанные в одном и том же модуле, всегда получают один и тот же сеанс на сервере.

Кто-нибудь может увидеть, что мне здесь не хватает ...?

Спасибо!

Jon

1 Ответ

1 голос
/ 05 мая 2010

Похоже, я нашел свой ответ.

Проблема заключалась в том, что мое приложение запускало несколько вызовов веб-службы при запуске (разные PRISM-модули работали независимо). И когда было сделано несколько вызовов до того, как были получены какие-либо ответы от веб-сервера, сеанс (и, следовательно, файл cookie ASP.NET_SessionId) не был предоставлен) до того, как были сделаны последующие вызовы.

Мое решение состояло в том, чтобы я сделал один вызов (асинхронный как всегда), например, к простому Ping-подобному веб-сервису, затем удерживал все остальные вызовы на веб-сервере до этого ответа вернулся. Затем всем последующим вызовам назначается один и тот же сеанс на сервере (поскольку теперь все они содержат файл cookie ASP.NET_SessionId в заголовке).

На практике этот вызов выполняется оболочкой PRISM, и никакие модули не загружаются до того, как я получу ответ. Тогда я абсолютно уверен, что ни один из других модулей не будет удовлетворен триггером, пока у меня не было состояния сеанса.

Тем не менее, если кто-нибудь увидит какие-либо другие проблемы с этим решением, я более чем рад услышать от вас.

Спасибо!

Jon

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