2008-09-15 3 views
0

У меня есть приложение, которое работает как дочернее приложение в виртуальном каталоге.Передача данных между родительским приложением и виртуальным каталогом

Я хочу передать значение из родительского приложения, но я считаю, что сеанс имеет ключевое значение для каждого приложения и не будет работать.

Чтобы еще больше усложнить ситуацию, родительское приложение является WebForms, а дочерним является NVelocity MVC.

Кто-нибудь знает трюк, который позволяет мне использовать какую-либо функцию типа сеанса между виртуальными приложениями?

EDIT: вебсервис на самом деле не то, что я имел в виду, все, что мне нужно сделать, это передать зарегистрированное имя пользователя пользователя дочернему приложению. Кроме того, если вы вызываете веб-службу обратно на родителя, я не получу один и тот же сеанс, поэтому я не буду знать, какой пользователь.

ответ

1

Похоже, что веб-сервис - это путь. Вы можете сделать примерно следующее:

  • Попросите приложение WebForms создать некоторые данные в своей базе данных с помощью связанного с ним ключа.
  • Передайте этот ключ в URL-адрес приложения NVelocity MVC.
  • Разрешить приложению NVMVC вызывать веб-службу (REST, XML-RPC, SOAP, что угодно) в приложении WebForms с использованием переданного ключа.

Это поможет вам решить любую проблему с сеансом или проблему с файлом cookie, которую вы можете иметь, и позволить вам передавать некоторые хорошо структурированные данные.

0

Вы можете сделать на стороне сервера HTTP запрос, это выглядит примерно так в C#:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("/ASPSession.ASP?SessionVar=" + SessionVarName); 
req.Headers.Add("Cookie: " + SessionCookieName + "=" + SessionCookieValue); 

HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); 
Stream receiveStream = resp.GetResponseStream(); 

System.Text.Encoding encode = System.Text.Encoding.GetEncoding("utf-8"); 

StreamReader readStream = new StreamReader(receiveStream, encode); 

string response = readStream.ReadToEnd(); 

resp.Close(); 
readStream.Close(); 
return response; 

На стороне ASP, я просто проверить, что запрос приходит только с локального хоста, чтобы предотвратить XSS-стиль а затем ответ - это просто значение переменной Session.

Нахождение файла cookie достаточно просто, все файлы сеанса имеют похожие имена, поэтому просто просмотрите коллекцию файлов cookie, пока не найдете подходящий файл cookie. Обратите внимание, что это работает, только если файлы cookie действительны для всего домена, а не только в подпапке, в которой вы находитесь.

0

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

База данных - это то, что вы можете использовать, если вам не нужен веб-сервис.

0

Используйте классическую форму жереха на странице, чтобы передать с помощью поста, в детском приложении забрать с помощью Request.Form

0

Почему бы не просто быть передан в виде зашифрованной строки запроса?

Приложение для детей может расшифровать его, проверить его, а bob - ваш дядя.

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