#c# #asp.net #iis
Вопрос:
У меня есть приложение, которое запускается как дочернее приложение в виртуальном каталоге.
Я хочу передать значение из родительского приложения, но я считаю, что сеанс настроен для каждого приложения и не будет работать.
Чтобы еще больше усложнить ситуацию, родительским приложением являются WebForms, а дочерним-NVelocity MVC.
Кто-нибудь знает трюк, который позволяет мне использовать какие-то функции типа сеанса между виртуальными приложениями?
РЕДАКТИРОВАТЬ: Веб-сервис на самом деле не то, что я имел в виду, все, что мне нужно сделать, это передать имя пользователя, вошедшего в систему, дочернему приложению. Кроме того, если вызвать веб-сервис обратно у родителя, я не получу тот же сеанс, поэтому я не буду знать, какой пользователь.
Ответ №1:
Похоже, что веб — сервис-это правильный путь. Вы могли бы сделать что-то вроде следующего:
- Попросите приложение WebForms создать некоторые данные в своей базе данных с каким-либо ключом, связанным с ним.
- Передайте этот ключ в URL-адресе приложению NVelocity MVC.
- Разрешите приложению NVMVC вызывать веб-службу (REST,XML-RPC,SOAP,что угодно) в приложении WebForms, используя переданный ключ.
Это позволит обойти любые проблемы с сеансовым вводом или доменом cookie, которые у вас могут возникнуть, и позволит вам передавать некоторые хорошо структурированные данные.
Ответ №2:
Вы можете выполнить 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 я просто проверяю, что запрос поступает только от localhost, чтобы предотвратить атаки в стиле XSS, и тогда ответ будет просто значением переменной сеанса.
Найти файл cookie достаточно легко, все файлы cookie сеанса имеют одинаковые имена, поэтому просто изучите коллекцию файлов cookie, пока не найдете соответствующий файл cookie. Обратите внимание, что это работает только в том случае, если файлы cookie действительны для всего домена, а не только для подпапки, в которой вы находитесь.
Ответ №3:
Храните данные, которыми вам нужно поделиться, в месте, где оба приложения могут запросить их, с ключом, известным обоим приложениям.
База данных-это то,что вы можете использовать, если вам не нужен веб-сервис.
Ответ №4:
Используйте классическую форму asp на своей странице для передачи с помощью сообщения, в дочернем приложении выберите с помощью формы запроса.
Ответ №5:
Почему его нельзя было просто передать в виде зашифрованной строки запроса?
Дочернее приложение может расшифровать его, подтвердить, а Боб-ваш дядя.