SpeechSynthesizer в ASP.NET - асинхронная ошибка

Я хотел бы иметь возможность генерировать речь в моем приложении ASP.NET, вызывая speak.aspx?text=Hello%20world. Это даст ответ в формате .wav.

Пока у меня есть пустая страница с кодом:

protected void Page_PreRender(object sender, EventArgs e)
{
  using (var ss = new SpeechSynthesizer()) {
    MemoryStream str = new MemoryStream();
    ss.SetOutputToWaveStream(str);
    ss.Speak(Server.UrlDecode(Request.QueryString["text"]));
    Response.AddHeader("Content-Type", "audio/wav");
    str.WriteTo(Response.OutputStream);
    str.Close();
  }
}

Однако это не удается с сообщением:

InvalidOperationException: асинхронные операции в этом контексте запрещены. Страница, запускающая асинхронную операцию, должна иметь для атрибута Async значение true, а асинхронная операция может быть запущена только на странице, предшествующей событию PreRenderComplete.

Если я добавлю Async="true" к директиве @Page, код будет запущен, но запрос страницы зависнет на неопределенный срок. Не могли бы вы сообщить мне, что не так, и показать правильный код / ​​подход к использованию?

Примечание. Я не могу просто использовать API преобразования текста в речь Google, поскольку он позволяет использовать строки длиной не более 100 символов.

Спасибо.


person James    schedule 06.10.2011    source источник


Ответы (1)


Вероятно, вам следует переместить приведенный выше код в метод page_load. нет реальной причины делать то, что вы делаете в пререндер.

Если вы сделаете страницу асинхронной, то вам нужно изменить свой стиль программирования. посмотрим, поможет ли это:

Пример асинхронной обработки страницы в ASP. чистые веб-формы (.NET 2.0)

person Simon Halsey    schedule 06.10.2011