protected void Page_Load(object sender, EventArgs e)
{
//RECEIVE
string stream = "";
try
{
//Здесь все ok: вывожу по байту входящий поток со строкой с xml
for(int i=0; i<=Request.InputStream.Length-1; i++)
{
stream+=((char)Request.InputStream.ReadByte()).ToString();
}
if(stream.Length>0)
{
XmlDocument doc = new XmlDocument();
[COLOR="Red"]doc.Load(Request.InputStream);[/COLOR]
}
}
catch
{
}
*.aspx <=> Flash
Подскажите пожалуйста, как можно реализовать получение - передачу данных из\в Flash в\из .aspx страницу? У меня есть код, но он очень древний и не работает.
Код довольно странный, взглянуть бы на классы FlashXmlProcessor и на класс Result, да и вообще что он делает??? Да и, собственно, какими данными собралась обмениваться ASPX-страница с флэш-мувиком?
http://www.intel.com/cd/ids/developer/emea/rus/320435.htm?page=5
http://blogs.gotdotnet.ru/personal/ddbear/CommentView.aspx?guid=8A980890-C9A5-48DD-B1CF-8AFFEBF6740D#commentstart
Как я понял, класс FlashXmlProcessor просто обрабатывает xml документ для дальнейшего использования. А класс Result - представляет собой структуру xml документа. Данные для обмена xml.
В принципе я не уверен. у меня ничего не компилится( Нашел 3 ссылки на эту тему - содержимое у всех идентичное. Я не понимаю как оно работает!(((
Всё просто, основную часть делает Flash-мувик, тебе надо написать скрипт на ActiveScript, который выполняет загрузку данных методом GET или POST, происходит асинхронная отправка страницы на сервер, там эти данные ты отлавливаешь из кода на C# через свойство Response. Правда на счёт ActiveScript я тебе не помогу:(
Код:
А красным выделил ошибку: "Root element is missing.". Объясните, пожалуйста в чем ошибка? xml имеет вид:
Код:
<login><name>myName</name><password>MyPass</password></login>
2) отправка данных во Флеш
Код:
//SEND
try
{
if(stream.Length>0)
{
Response.ContentType = "text/xml";
XmlSerializer XmlSr = new XmlSerializer(typeof(ErrorXMLType));
ErrorXMLType xmlE = new ErrorXMLType();
xmlE.error="xmlExcepction";
xmlE.message="Root element is missing.";
XmlSr.Serialize(Response.Output, xmlE);
}
}
catch
{
}
try
{
if(stream.Length>0)
{
Response.ContentType = "text/xml";
XmlSerializer XmlSr = new XmlSerializer(typeof(ErrorXMLType));
ErrorXMLType xmlE = new ErrorXMLType();
xmlE.error="xmlExcepction";
xmlE.message="Root element is missing.";
XmlSr.Serialize(Response.Output, xmlE);
}
}
catch
{
}
Но! у меня вместе с xml посылается еще и вся сгенерированная ASP страница. А это во много раз больше передаваемой инфы! Или все передается только один раз: и загружается страница и передаются данные? Как мне быть, не подскажите?
Код:
Response.Write(XmlHelper.Serialize.Xml(typeof(Result), res));
я так и не нашел данного класа!!!!! Он существует?
Удалось ли Вам найти решение "разговора" между Flash и ASP.NET?
У меня та-же задача и я не знаю с какой стороны к ней подступиться.
Да, этот вопрос я решил. Правдо появились другие "разногласья". У Вас может таких не будет) Пока борюсь, если что то придется спросить на форуме)
Обращайтесь ICQ 307731143
P.S.могу выложить код сюда, хотя впринципе он сильно не отличается от выше изложенного, так что не вижу смысла. Решение простое - пусть народ чуть-чуть подумает)))
Буду очень Вам признателен, если сможете выложить код на форум, или если Вам это более удобно - на мою личку.
Заранее благодарствую!
P.S. аськой еще не завелся - вот такая деревня :-)
Цитата: levik
Еще раз здравствуйте, IYAKOV
Буду очень Вам признателен, если сможете выложить код на форум, или если Вам это более удобно - на мою личку.
Буду очень Вам признателен, если сможете выложить код на форум, или если Вам это более удобно - на мою личку.
Ну если выкладывать, то уже для всех))
Цитата: levik
P.S. аськой еще не завелся - вот такая деревня :-)
Пора бы, пора. Очень хорошая вещь)
Цитата: levik
Заранее благодарствую!
У меня будут встречные вопросы...
Код:
public partial class login : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string error="";
//
loginFunctions lf = new loginFunctions();
//RECEIVE xml
//проверка. пришло ли что-нибудь? т.к. при чтении может возникнуть ошибка, если ничего не пришло
XmlDocument inputDoc = lf.ReceiveXML(Request.InputStream);
if(inputDoc != null)
{
//analize name&password ==> check in base
//передаем документ и [COLOR="Red"]сессию[/COLOR]. почему-то [COLOR="Red"]вызвать из функции ее не удалось[/COLOR]
error = lf.AnalyseXML(inputDoc, Session);
//SEND answer xml <""> or <error>
//исходящий поток и исходящая информация. опять же [COLOR="Red"]response вызвать из функции не получилось[/COLOR]
error = lf.SendXML(Response, error);
}
}
}
{
protected void Page_Load(object sender, EventArgs e)
{
string error="";
//
loginFunctions lf = new loginFunctions();
//RECEIVE xml
//проверка. пришло ли что-нибудь? т.к. при чтении может возникнуть ошибка, если ничего не пришло
XmlDocument inputDoc = lf.ReceiveXML(Request.InputStream);
if(inputDoc != null)
{
//analize name&password ==> check in base
//передаем документ и [COLOR="Red"]сессию[/COLOR]. почему-то [COLOR="Red"]вызвать из функции ее не удалось[/COLOR]
error = lf.AnalyseXML(inputDoc, Session);
//SEND answer xml <""> or <error>
//исходящий поток и исходящая информация. опять же [COLOR="Red"]response вызвать из функции не получилось[/COLOR]
error = lf.SendXML(Response, error);
}
}
}
Код:
public class loginFunctions
{
/// <summary>
/// Receive income xml and convert it to xml
/// </summary>
/// <param name="incomeStream">Stream of income data</param>
/// <returns>XmlDocument</returns>
public XmlDocument ReceiveXML(Stream incomeStream)
{
XmlDocument doc=null;
try
{
//чтение по символьное. преобразовывание в xml
if(incomeStream.Length>0)
{
string stream = "";
for(int i=0; i<=incomeStream.Length-1; i++)
stream+=((char)incomeStream.ReadByte()).ToString();
XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Fragment;
settings.IgnoreWhitespace = true;
//о, чудо! делаем преобразования StreamReader => StringReader => XmlReader => xmlDocument
doc = new XmlDocument();
doc.Load(new StringReader(stream));
}
}
catch
{
return null;
}
return doc;
}
/// <summary>
/// Analyse income xml Name and pass and try to LOGIN
/// </summary>
/// <param name="doc">XmlDocument</param>
/// <param name="Session">current HttpSessionState</param>
/// <returns>error is happened</returns>
public string AnalyseXML(XmlDocument doc, HttpSessionState Session)
{
//LOGIC STRUCTURE HERE
//1) analyse type
//2) do action requested
string userName = "";
string userPassword = "";
//1) здесь помещается анализатор xml, который вам нужно
XmlNode root=doc.FirstChild;
for(XmlNode node=root.FirstChild; node!=null; node=node.NextSibling)
{
switch(node.Name)
{
case "name":
userName+=node.FirstChild.Value;
break;
case "password":
userPassword+=node.FirstChild.Value;
break;
}
}
//2) тут обращение к сервису если надо 8)
ServerService ss = new ServerService();
string answer = ss.UserLogIn(userName, userPassword);
if(answer.Substring(0,7)=="welcome")
{
Session["user"] = userName;
return answer;
}
return answer;
}
/// <summary>
/// Send Error xml to flash
/// </summary>
/// <param name="outcome">HttpResponse</param>
/// <param name="errorMsg">error</param>
/// <returns>error if appears during sending</returns>
public string SendXML(HttpResponse outcome, string errorMsg)
{
try
{
//send error to the flash client
//ставим тип отправляемой ин-фы xml, картинка, текст...
outcome.ContentType = "text/xml";
outcome.Clear();
//структура xml создается по структуре класса
xmlAuthorithationAnswer au = new xmlAuthorithationAnswer();
au.answer = errorMsg;
//сериализуется и отправляется
XmlSerializer XmlSerialized = new XmlSerializer(typeof(xmlAuthorithationAnswer));
XmlSerialized.Serialize(outcome.OutputStream, au);
}
catch(Exception exc)
{
return exc.Message;
}
return "";
}
}
{
/// <summary>
/// Receive income xml and convert it to xml
/// </summary>
/// <param name="incomeStream">Stream of income data</param>
/// <returns>XmlDocument</returns>
public XmlDocument ReceiveXML(Stream incomeStream)
{
XmlDocument doc=null;
try
{
//чтение по символьное. преобразовывание в xml
if(incomeStream.Length>0)
{
string stream = "";
for(int i=0; i<=incomeStream.Length-1; i++)
stream+=((char)incomeStream.ReadByte()).ToString();
XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Fragment;
settings.IgnoreWhitespace = true;
//о, чудо! делаем преобразования StreamReader => StringReader => XmlReader => xmlDocument
doc = new XmlDocument();
doc.Load(new StringReader(stream));
}
}
catch
{
return null;
}
return doc;
}
/// <summary>
/// Analyse income xml Name and pass and try to LOGIN
/// </summary>
/// <param name="doc">XmlDocument</param>
/// <param name="Session">current HttpSessionState</param>
/// <returns>error is happened</returns>
public string AnalyseXML(XmlDocument doc, HttpSessionState Session)
{
//LOGIC STRUCTURE HERE
//1) analyse type
//2) do action requested
string userName = "";
string userPassword = "";
//1) здесь помещается анализатор xml, который вам нужно
XmlNode root=doc.FirstChild;
for(XmlNode node=root.FirstChild; node!=null; node=node.NextSibling)
{
switch(node.Name)
{
case "name":
userName+=node.FirstChild.Value;
break;
case "password":
userPassword+=node.FirstChild.Value;
break;
}
}
//2) тут обращение к сервису если надо 8)
ServerService ss = new ServerService();
string answer = ss.UserLogIn(userName, userPassword);
if(answer.Substring(0,7)=="welcome")
{
Session["user"] = userName;
return answer;
}
return answer;
}
/// <summary>
/// Send Error xml to flash
/// </summary>
/// <param name="outcome">HttpResponse</param>
/// <param name="errorMsg">error</param>
/// <returns>error if appears during sending</returns>
public string SendXML(HttpResponse outcome, string errorMsg)
{
try
{
//send error to the flash client
//ставим тип отправляемой ин-фы xml, картинка, текст...
outcome.ContentType = "text/xml";
outcome.Clear();
//структура xml создается по структуре класса
xmlAuthorithationAnswer au = new xmlAuthorithationAnswer();
au.answer = errorMsg;
//сериализуется и отправляется
XmlSerializer XmlSerialized = new XmlSerializer(typeof(xmlAuthorithationAnswer));
XmlSerialized.Serialize(outcome.OutputStream, au);
}
catch(Exception exc)
{
return exc.Message;
}
return "";
}
}
Код:
//структура входящих и исходящих xml
/// <summary>
/// XMLType received from Client
/// </summary>
public class xmlAuthorithation
{
public string userName="";
public string userPassword="";
}
/// <summary>
/// XMLType send to Client
/// </summary>
public class xmlAuthorithationAnswer
{
public string answer="";
}
/// <summary>
/// XMLType received from Client
/// </summary>
public class xmlAuthorithation
{
public string userName="";
public string userPassword="";
}
/// <summary>
/// XMLType send to Client
/// </summary>
public class xmlAuthorithationAnswer
{
public string answer="";
}
Про Flash. Код тоже писать? Тут у меня вопросы возникают, т.к. считаю. что из-за нее и проблемы на странице.
Как ведет себя Flash при запросе на SendAndLoad()? Почему-то у меня flash глючит если после отправки в нее xml и вызов redirectFromLoginPage, то этот xml не доходит до flash а зависает. И если попробовать перейти на другую страницу, то пишет что на страницу передается потенциально опасная ин-фа (наш отправляемый xml)??
Начну разбираться и, если сумею, постараюсь ответить на поднятые вопросы.
Напишите о результате