Доступ к файлам cookie из браузера C# Vxml

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


person Dan Gardiner    schedule 04.10.2011    source источник


Ответы (1)


Я был менеджером по 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 не предоставляет такой функциональности.

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

person Silverback    schedule 22.02.2012