SpeechSynthesizer в ASP.NET - асинхронная ошибка - PullRequest
2 голосов
/ 06 октября 2011

Я хотел бы иметь возможность генерировать речь в моем приложении 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 символов.

Спасибо.

1 Ответ

0 голосов
/ 06 октября 2011

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

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

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

...