2015-10-24 4 views
0

Я пытаюсь подключиться к индексировать IG потокового API с использованием LightStreamer, и я работаю на этом уроке http://www.lightstreamer.com/docs/client_generic_base/Network%20Protocol%20Tutorial.pdfLightstreamer создать сеанс

Я успешно создал сеанс потоковой передачи (стр 16 4,1 - /lightstreamer/create_session.txt) , выполнив следующие действия:

public void ConnectToLightStreamer(Credentials credentials) 
{ 
    var LightStreamerRequest = (HttpWebRequest)WebRequest.Create(credentials.LIGHTSTREAMERENDPOINT + "/lightstreamer/create_session.txt"); 
    LightStreamerRequest.Method = "POST"; 
    LightStreamerRequest.ContentType = "application/x-www-form-urlencoded"; 
    LightStreamerRequest.Headers.Add("Cache-Control", "no-cache"); 

    using (var streamWriter = new StreamWriter(LightStreamerRequest.GetRequestStream())) 
    { 
     string Body = "LS_user=" + credentials.CLIENTID + "&LS_password=CST-" + credentials.CST + "|XST-" + credentials.SECURITY_TOKEN + "&LS_adapter_set=DEFAULT&LS_polling=true&LS_polling_millis=0&LS_idle_millis=0&LS_report_info=true"; 

     streamWriter.Write(Body); 
     streamWriter.Flush(); 
     streamWriter.Close(); 
    } 

    var httpResponse = (HttpWebResponse)LightStreamerRequest.GetResponse(); 
    Stream stream = httpResponse.GetResponseStream(); 

    using (stream) 
    { 
     StreamReader reader = new StreamReader(stream, Encoding.UTF8); 
     string responseString = reader.ReadToEnd(); 

     string[] SessionData = responseString.Split(new string[] { Environment.NewLine }, StringSplitOptions.None); 

     string[] sessionID = SessionData[1].Split(':'); 
     credentials.SESSIONID = sessionID[1]; 

     string[] controlAddress = SessionData[2].Split(':'); 
     credentials.CONTROLADDRESS = controlAddress[1]; 

     Console.WriteLine(responseString); 
     Console.WriteLine("CONNECTED"); 
     Console.WriteLine(Environment.NewLine); 
     Console.WriteLine(Environment.NewLine);     
    } 
} 

мне удалось успешно связать сессию (стр 18/19, /lightstreamer/bind_session.txt), выполнив следующие действия:

public void BindSession(Credentials credentials) 
{ 
    var LightStreamerRequest = (HttpWebRequest)WebRequest.Create(credentials.LIGHTSTREAMERENDPOINT + "/lightstreamer/bind_session.txt"); 
    LightStreamerRequest.Method = "POST"; 
    LightStreamerRequest.ContentType = "application/x-www-form-urlencoded"; 
    LightStreamerRequest.Headers.Add("Cache-Control", "no-cache"); 

    using (var streamWriter = new StreamWriter(LightStreamerRequest.GetRequestStream())) 
    { 

     string Body = "LS_user=" + credentials.CLIENTID + "&LS_session=" + credentials.SESSIONID + "&LS_password=CST-" + credentials.CST + "|XST-" + credentials.SECURITY_TOKEN + "&LS_adapter_set=DEFAULT&LS_polling=true&LS_polling_millis=0&LS_idle_millis=0&LS_report_info=true&LS_polling_millis=1000"; 

     streamWriter.Write(Body); 
     streamWriter.Flush(); 
     streamWriter.Close(); 
    } 

    var httpResponse = (HttpWebResponse)LightStreamerRequest.GetResponse(); 
    Stream stream = httpResponse.GetResponseStream(); 

    using (stream) 
    { 
     StreamReader reader = new StreamReader(stream, Encoding.UTF8); 

     string responseString = reader.ReadToEnd(); 

     Console.WriteLine("BIND: " + responseString); 
    } 
} 

Моя проблема У меня возникла сессия, и я выяснил, какую информацию я должен отправить и как. Страница 20/21 /lightstreamer/control.txt.

У меня есть следующие, но я знаю, что это не так, как я не получаю никакого ответа:

public void ControlStreamer(Credentials credentials) 
{ 
    var LightStreamerRequest = (HttpWebRequest)WebRequest.Create(credentials.LIGHTSTREAMERENDPOINT + "/lightstreamer/control.txt"); 
    LightStreamerRequest.Method = "POST"; 
    LightStreamerRequest.ContentType = "application/x-www-form-urlencoded"; 
    LightStreamerRequest.Headers.Add("Cache-Control", "no-cache"); 

    using (var streamWriter = new StreamWriter(LightStreamerRequest.GetRequestStream())) 
    { 

     string Body = "LS_user=" + credentials.CLIENTID + "&LS_password=CST-" + credentials.CST + "|XST-" + credentials.SECURITY_TOKEN + "&LS_session=" + credentials.SESSIONID + "&LS_polling=true&LS_polling_millis=0&LS_idle_millis=0&LS_report_info=true&LS_polling_millis=1000&LS_table=" + credentials.SESSIONID + "&LS_op=add&LS_schema=MARKET:IX.D.DOW.DAILY.IP&LS_id=1&LS_mode=MERGE"; 

     streamWriter.Write(Body); 
     streamWriter.Flush(); 
     streamWriter.Close(); 
    } 

    var httpResponse = (HttpWebResponse)LightStreamerRequest.GetResponse(); 
    Stream stream = httpResponse.GetResponseStream(); 

    using (stream) 
    { 
     StreamReader reader = new StreamReader(stream, Encoding.UTF8); 

     string responseString = reader.ReadToEnd(); 

     Console.WriteLine("CONTROL: " + responseString); 
    } 
} 

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

Я занимаюсь этим проектом в течение 2 полных дней +, но едва ли понимаю документацию.

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

ответ

2

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

Вы можете загрузить клиентскую библиотеку и доступ к полной документации и примеры из https://labs.ig.com/lightstreamer-downloads

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