Доступ к Cookie из браузера C # Vxml - PullRequest
1 голос
/ 04 октября 2011

Объект Microsoft.Rtc.Collaboration.AudioVideo.VoiceXml.Browser в C # имеет метод RunAsync, который запускает URI Vxml-страницы, и объект CookieCollection, который теоретически должен позволять передавать параметры, которые могут быть используется в сценарии. Я испробовал все мыслимые способы получения файлов cookie из Vxml, и, похоже, к документу не приложено никаких. Любые идеи о том, как получить доступ к переданным в куки из Vxml?

В упрощенном виде это то, что я имел как vxml:

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE vxml PUBLIC "-//BeVocal Inc//VoiceXML 2.0//EN" "http://cafe.bevocal.com/libraries/dtd/vxml2-0-bevocal.dtd">
<vxml version="2.1" xmlns="http://www.w3.org/2001/vxml" xml:lang="en-US" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml21/vxml.xsd" >
  <form id="QueueForm">
  <script> 
   <![CDATA[
      function GetCookie(name)
      {         
         var cookies = document.cookie;
         return cookies;
      }
   ]]>
  </script>
  <var name="cookie" expr="GetCookie('')" />
    <field name="QueueField">
      <prompt>
        <value expr="cookie" />
        were cookies
      </prompt>
      <grammar mode="dtmf" root="Dtmf">
        <rule id="Dtmf">
          <one-of>
            <item> 1 </item>
          </one-of>
        </rule>
      </grammar>
      <filled>
        <exit namelist="cookie"/>
      </filled>
    </field>
  </form>
</vxml>

И это в телефонном коде

_browser.SetAudioVideoCall(_call);
System.Net.CookieContainer cookies = new System.Net.CookieContainer(1);
cookies.Add(new System.Net.Cookie("data", "grapefruit", "/", "localhost"));
_browser.Run(_startPage, cookies);

... что приводит к разговору "Были печеньки". во всех случаях я пытался.

Я пытался установить разные домены и пути для объекта cookie, вызывая разные объекты Javascript, чтобы получить cookie разными способами, и что-нибудь еще, о чем я мог подумать, но не смог получить доступ к cookie. Примеры проектов Microsoft для Vxml также не содержат пример доступа к файлам cookie. Я уверен, что есть способ получить доступ к элементам, которые передаются, но я не смог понять, как; есть мысли?

1 Ответ

1 голос
/ 22 февраля 2012

Я был премьер-министром по API браузера VoiceXML, который мы поставили с UCMA 3.0. Я связался с одним из разработчиков, который работал над его реализацией, и попросил ее разобраться в этой проблеме. Вот ее ответ.

Браузер VXML позволяет отправлять CookieContainer в браузер методами Run () и RunAsync (). В ходе работы браузер будет отправлять http-запросы на серверы для содержимого vxml. Этот контейнер cookie отправляется как часть запроса http, и любые файлы cookie, отправляемые сервером, также попадают в этот контейнер. Это за дизайн.

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

Однако файлы cookie не передаются в само приложение vxml, то есть они не доступны на уровне javascript внутри документа vxml. Я согласен, что это было бы удобно, и, конечно, инженеры, привыкшие иметь дело с HTML-браузерами, где они могут получить доступ к «document.cookie», могут ожидать этого. Но спецификация w3c vxml не вызывает стандартного поведения в этой области, и браузер Microsoft не предоставляет эту функциональность.

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

...